1
)CDC 的所有成员函数都以逻辑坐标作为参数。
2)CWnd 的成员函数都以设备坐标作为参数。
3)所有点中测试之类的函数都应该考虑设备坐标,区域的定义应采用设备坐标。某些像 CRect::PtInRect
之类的函数只有在采用设备坐标参数时才会保证有正确的结果。
4)将一切需要长期使用的值用逻辑坐标或物理坐标保存。
5)一般在虚函数 OnPrepareDC 中设置映射模式要比在 OnDraw 函数中设置合适一些。
例子如下:
在 View 类中添加声明:
private:
// 画笔颜色
int m_nColor;
// 矩形区域
CRect m_rectEllipse;
在构造函数中对变量进行初始化:
m_nColor=GRAY_BRUSH;
m_rectEllipse=CRect(0,0,4000,-4000);
在 View 类中重载 OnPrepareDC 函数,添加代码:pDC->SetMapMode(MM_HIMETRIC);将坐标系
的单位设为 0.01mm
在 OnDraw 函数中添加代码:
pDC->SelectStockObject(m_nColor);
pDC->Ellipse(m_rectEllipse);
添加左键单击的消息映射 OnLButtonDown:
并添加代码:
CRect rect=m_rectEllipse;
CClientDC dc(this);
dc.SetMapMode(MM_HIMETRIC);
dc.LPtoDP(rect);