CClientDC 显示设备上下文
CClientDC dc(this);
dc.MoveTo(0, 0);
dc.LineTo(800, 800);
CWindowDC类显示上下文
CWindowDC dc(this);
dc.MoveTo(0, 0);
dc.LineTo(800, 800);
- 这时的两类的显示无区别
CWindowDC dc(GetParent());
```
+ 获取父窗口指针,才能在父窗口绘图
+
## CMetaFileDC类
+ 图元文件的上下文类(图元文件是计算机中的一种矢量图形 .wmf)
+ 1。创建函数
+ 2。显示函数
````cpp
Create();
Play();
void CMFCApplicationMXYView::Create(void) {
CMetaFileDC mDC;
//创建图元的输出文件
mDC.Create(CString("Pane.wmf"));
//开始绘制图形
CRect rect;
//获取用户区大小
GetClientRect(&rect);
//设置文本颜色和笔颜色
CPen NewPenRed(PS_SOLID, 3, RGB(128, 128, 0));
CPen* pOldPen = mDC.SelectObject(&NewPenRed);
//定义中心点坐标
CPoint centerPoint(rect.right / 2, rect.bottom / 2);
//定义外正方形的半边长(为了方便后续使用,定义半边长)
int nHalfEdge = 150;
//绘制正方形
mDC.Rectangle(centerPoint.x - nHalfEdge, centerPoint.y - nHalfEdge, centerPoint.x + nHalfEdge, centerPoint.y + nHalfEdge);
//定义各个连接点
CPoint P0 = CPoint(centerPoint.x - nHalfEdge / 2, centerPoint.y);
CPoint P1 = CPoint(centerPoint.x - nHalfEdge / 2, centerPoint.y - nHalfEdge / 2);
//绘制图形
mDC.MoveTo(centerPoint);
mDC.LineTo(P0);
mDC.LineTo(P1);
//绘制完成后要恢复画笔
mDC.SelectObject(pOldPen);
NewPenRed.DeleteObject();
//将绘制写入图元文件并关闭图元文件、释放图元文件的句柄
HMETAFILE hmf = mDC.Close();
DeleteMetaFile(hmf);
}
void CMFCApplicationMXYView::Play(void) {
CDC* pDC = GetDC();
//打开图元文件,返回图元文件句柄
HMETAFILE hmf = GetMetaFile(_T("Pane.wmf"));
//显示图元文件
pDC->PlayMetaFile(hmf);
DeleteMetaFile(hmf);
//释放设备上下文指针
ReleaseDC(pDC);
}
CPaintDC类
- 相应WM_PAINT消息的设备上下文类
- CPaintDC对象只能在OnPaint()函数中使用
项目、类向导
在OnDraw()中画一个椭圆、然后在OnPaint()中画一条直线,发现只显示直线,说明OnPaint()相应了WM_Paint消息后,OnDraw()被自动屏蔽了。
总结
CClientDC类 | CWindowDC类 | |
---|---|---|
绘图区间 | 窗口客户区 | 整个窗口 |
对象定义 | CClientDC dc(this) | CWindowDC dc(GetParent()) |
CPaintDC类
- 使用CPaint定义对象绘制图形,需要在项目类向导中添加WM_PAINT消息的映射函数OnPaint。
- OnPaint()相应WM_PAINT消息后,OnDraw()被自动屏蔽了。