MFC把GDI函数都封装在CDC中, 核心就是成员变量m_hDC, 所有的成员函数都是围绕着它来进行的;
在MFC封装的三个派生类中, 只有构造函数和析构函数两个成员函数, 目的主要是利用对象构造和析构时, 可以自动成对调用函数. 例如:BeginPaint和EndPaint是必须成对使用的, 一旦忘记调用EndPaint就可能造成内存泄漏;
CDC三大派生类:
1. CPaintDC类: 封装BeginPaint和EndPaint函数, 用于标准客户区绘图, 窗口刷新时不消失, 在WM_PAINT消息下使用;
2. CWindowDC类: 封装GetWindowDC和ReleaseDC函数, 用于非客户区绘图, 窗口刷新时不消失, 在WM_NCPAINT消息下使用;
3. CClientDC类: 封装GetDC和ReleaseDC函数, 用于临时客户区绘图, 窗口刷新时消失, 任何时候都可以使用;
备注:
CMenuDC类: 封装CreateCompatibleDC和DeleteDC, 用于内存绘图, 常用于双缓冲防止画面闪烁; Visual C++6.0暂未封装此类, VS高版本IDE中有此类;
通过CDC三大派生类绘图, 代码如下:
1.标准客户区绘图,
2. 非客户区绘图:
3. 临时客户区绘图: