📄 04.2.2 利用mfc的cdc类实现画线功能.txt
字号:
4.2.2 利用 MFC的 CDC类实现画线功能
MFC为我们提供一个设备描述表的封装类 CDC,该类封装了所有与绘图相关的操作。该类提供一个数据成员 m hDC,用来保存与 CDC类相关的 DC句柄。其道理与 CWnd类提供m hWnd成员变量保存与窗口相关的窗口旬柄是一样的。如例 4-10所示就是利用 MFC的 CDC类实现画线功能的代码。
例 4-10
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);
*/
CDC* pDC = GetDC() ; .
pDC一 >MoveTo(m-p tOrigin) ;
pDC->LineTo(point);
ReleaseDC(pDC);
CView: : OnLButtonUp(nFlags , point);
为了能够让读者更好地理解使用 CDC类和使用 Platform SDK函数实现画线功能的异同,笔者并未删除先前利用 SDK函数编写的画线代码,只是将其注释起来,这样可以直观地比较这两种实现方式。
从例 4-10所示的代码可以看出,利用 MFC类实现画线功能时,首先需要定义一个 CDC类型的指针,井利用 CWnd类的成员函数 GetDC获得当前窗口的设备描述表对象的指针:接着利用 CDC类的成员函数 MoveTo和 LineTo完成画线操作:最后调用 CWnd类的成员函数 ReleaseDC释放设备描述表资源。
Build并运行 Draw程序,拖动鼠标同样可以在窗口中绘制线条。
国际z因为 CWnd类提供了成员函数 GetDC ;f:p Rele脱DC,因此先前利
用 Platfonll SDK函数实现画线功能时,这两个函数前面都加上了两个冒号,表明它们是全局 SDK函数。否则, VC I I编译器将认为它们是 CWnd类的成员函数。
m
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -