A. VC 圖形編輯 求助!
用設備坐標捕捉點坐標後,將其轉換為邏輯坐標
轉換方法如下:
CClientDC dc(this);
然後和繪圖之前所做的 SetViewMode,SetViewportOrg,SetWindowOrg 一致的方法對這個dc做變換
最後轉換
dc.LPtoDP(&point);
可以創建一個函數,在繪圖前和轉換前調用:
MyPrepareDC(CDC * pdc)
{
SetViewMode(...
SetViewOrg...
SetWindowOrg.....
}
然後繼承 OnPrepareDC 去調用這個函數
OnPrepareDC( CDC * pDC,...)
{
MyPrepareDC(pDC);
}
這樣就可以在其他地方使用了
CClientDC dc(this);
MyPrepareDC(&dc);
dc.LPtoDP(&point);
B. 求教C++:MSDN上說DPtoLP函數能將設備坐標轉化為邏輯坐標,請問轉化後的邏輯坐標存在哪裡
函數原型:BOOL DPtoLP(HDC hdc, LPPOINT lpPoints, int nCount);參數:hdc:指向設備環境的句柄。lpPoints:指向POINT結構數組的指針,每個POINT結構中的X和Y坐標將被轉換。
lpPoints所指的指在調用完DPtoLP後會被修改
C. vc邏輯坐標和設備坐標的問題
如果我說的對,你加分給我呀!
你的概念好模糊呀!
1.繪圖函數用的全是邏輯坐標。
2.顯示器解析度就是象素點!800*600,就是800個象素寬乘以600個象素高的矩陣。也就是說坐標最大值就是800和600,與顯示器大小無關,只與顯示器解析度設置有關。這叫"設備無關性"
3.MM_HIMETRIC映射模式下,1邏輯單位等於0.001毫米(不是0.01mm)。假設你的顯示器高150mm,那麼邏輯坐標Y=150000;那麼邏輯坐標與設備坐標的轉換比是:150000:800=187.5
4.CPoint point(5, 6); 5,6全是邏輯值
5.dc.LPtoDP(&point); 5/18.75=0.266;6/18.75=0.32。而像素應是正整數。當然就是0了。
6.dc.DPtoLP(&point); //轉換後:x=156, y = -187
將(0,0)程序計數都是從0數的,不是1.所以坐標是0,數值應是1,轉換成邏輯坐標是187.5,坐標類型是整數就變成187了。同理:600象素點是X,轉換後就變成了0,156了
怎麼樣,明白了就加分給我吧,我也是初學者,想清這個理花了我4天,近50個小時。沒功勞也有苦勞呀!
D. 什麼是邏輯坐標和設備坐標
對於屏幕,邏輯坐標是第一象限,設備坐標是第四象限,當然數值都是正值。
就是說屏幕的邏輯坐標是左下角是原點,整個屏幕都處於第一象限。
屏幕的設備坐標是左上角是原點。
E. VC中的坐標點如何確定
建立以左上角為原點,X軸和Y軸為1000的坐標
我們可以用以下代碼:
void CTtView::OnDraw(CDC* pDC)
{
CTtDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rect;
GetClientRect(&rect);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetViewportOrg(0,0);
pDC->SetViewportExt(rect.right,rect.bottom);
pDC->SetWindowOrg(0,0);
pDC->SetWindowExt(1000,1000);
pDC->MoveTo(50,50);
pDC->LineTo(50,950);
pDC->LineTo(950,950);
pDC->LineTo(50,50);
}
代碼分析:
1. GetClientRect(&rect); 取得客戶區矩形區域,將其存放在rect中
2. 用pDC->SetMapMode(MM_ANISOTROPIC); 設置映射模式
3. 通過pDC->SetViewportOrg(0,0);設置邏輯坐標的原點
4. 通過pDC->SetViewportExt(rect.right,rect.bottom);和
pDC->SetWindowExt(1000,1000);來確定邏輯坐標下和設備坐標下的尺寸對應關系
5. 在MM_ANISOTROPIC模式下,X軸單位和Y軸單位可以不相同
6. 坐標方向的確定方法是如果邏輯窗范圍和視口范圍符號相同,則邏輯坐標的方向和視口的方向相同,即X軸向右為正,Y軸向下為正。
7. 如果將顯示模式改為MM_ISOTROPIC,那麼X軸單位和Y軸單位一定相同,感興趣的讀者可以自己使一下。
(二) 建立以視窗中心為原點的坐標
用如下代碼:
void CTtView::OnDraw(CDC* pDC)
{
CTtDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rect;
GetClientRect(&rect);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetViewportOrg(rect.right/2,rect.bottom/2);
pDC->SetViewportExt(rect.right,rect.bottom);
pDC->SetWindowOrg(0,0);
pDC->SetWindowExt(1000,-1000);
pDC->MoveTo(150,150);
pDC->LineTo(-150,-200);
pDC->LineTo(150,-150);
pDC->LineTo(150,150);
}
代碼分析:
1. 用 pDC->SetViewportOrg(rect.right/2,rect.bottom/2); 設置視口的原點。
2. 用pDC->SetViewportExt(rect.right,rect.bottom);和pDC->SetWindowExt(1000,-1000);來確定設備坐標和邏輯坐標的單位對應關系。
3. 因為邏輯窗范圍和視口范圍的符號不一致,縱坐標取反,所以Y軸向上為正。
F. 怎樣用VC改變對話框的邏輯坐標急!!!!!!!!!!
試試 SetWindowPos()
G. 設備坐標到邏輯坐標的轉換
如果邏輯坐標與設備坐標不同,在構造 ClientDC後,需要設置它的邏輯坐標系,否則它是按MM_TEXT方式工作,這會使得DPtoLP沒啥變化。
我一般是在重載的OnPrepareDC中處理設置邏輯坐標,這樣在滑鼠消息的函數中,得到ClientDC後,再調一下這個函數。
H. 你好!想向您請教一些VC++中有管設備坐標和邏輯坐標的問題
設備坐標(Device Coordinate)又稱為物理坐標(Physical Coordinate),是指輸出設備上的坐標。通常將屏幕上的設備坐標稱為屏幕坐標。設備坐標用對象距離窗口左上角的水平距離和垂直距離來指定對象的位置,是以像素為單位來表示的,設備坐標的X軸向右為正,Y軸向下為正,坐標原點位於窗口的左上角。
邏輯坐標(Logical Coordinate)是系統用作記錄的坐標。在預設的模式(MM_TEXT)下,邏輯坐標的方向和單位與設備坐標的方向和單位相同,也是以像素為單位來表示的,X軸向右為正,Y軸向下為正,坐標原點位於窗口的左上角。
更詳細,更參考http://blog.csdn.net/pathuang68/archive/2009/05/27/4219657.aspx或者搜索孫鑫的VC++教程,裡面講的很清楚。
I. delphi如何實現設備坐標和邏輯坐標的轉換
裝備坐標,就是物理坐標,比如,你的顯示裝備1024×768,1個像素代表1個物理坐標點。邏輯坐標,可以說是虛擬坐標,1般情況下,邏輯和物理坐標是有映照關系的,要繪制邏輯坐標,必須要先映照成對應的物理坐標,才可以。