MFC为我们提供了一个设备描述表的封装类CDC,该类封装了所有与绘图相关的操作。该类提供了一个数据成员m_hDC,用来保存于CDC 类相关的DC 句柄。
其道理,与CWnd类提供m_hWnd成员变量保存与窗口相关的窗口句柄是一样的。代码如下:
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
/* HDC hdc;
//首先,获得窗口的设备描述符
hdc=::GetDC(m_hWnd);
//线段的起点
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
//线段的终点
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);//释放DC
*/
CDC *pDC=GetDC();
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);
CView::OnLButtonUp(nFlags, point);
}
利用MFC 类实现画线功能时,首先需要定义一个CDC 类型的指针,并利用CWnd类的成员函数GetDC 获取当前窗口的设备描述表对象的指针;
接着,利用CDC类的成员函数MoveTo和LineTo完成画线操作;最后,调用CWnd类的成员函数ReleaseDC释放设备描述表资源。
Build并运行Drawc程序,拖动鼠标同样可以在窗口中绘制直线。
提示:
因为CWnd类提供了成员函数GetDC和ReleaseDC,因此先前利用Platform SDK函数实现画线功能时,这两个函数前面都加上了"::",表明它们是全局函数。否则,VC++编译器将认为它们是CWnd类的成员函数。