HDC、CDC、CWindowDC、CClientDC……

DC(DeviceContex)叫做设备环境或设备描述表、设备上下文,是MFC绘图的基础。
经常用到的有CDC、CWindowDC、CClientDC、CPaintDC、CMetaFileDC还有HDC。

一、HDC与CDC的区别和联系
首先要明确HDC是资源句柄,其他都是MFC的类。HDC和CDC的关系与HWnd和CWnd的关系类似,CWnd中有一个HWnd类型的成员变量m_hWnd,同样CDC中有一个HDC类型的成员变量m_hDC。

二、CDC、CWindowDC、CClientDC、CPaintDC、CMetaFileDC的关系
查阅MFC Hierarchy Chart可以看到CWindowDC、CClientDC、CPaintDC和CMetaDC都是由CDC派生得到的。

CDC: Object provides member functions for working with a device context, such as a display or printer, as well as members for working with a display context associated with the client area of a window.

CClientDC:Device context associated with a CClientDC object is the client area of a window.

CWindowDC:CWindowDC object accesses the entire screen area of a CWnd (both client and nonclient areas).

CPaintDC:A CPaintDC object can only be used when responding to a WM_PAINT message, usually in your OnPaint message-handler member function.

CMetaFileDC : Implements a Windows metafile, which contains a sequence of graphics device interface (GDI) commands that you can replay to create a desired image or text.

CPaintDC只能在WM_PAINT消息响应中使用,CMetaFileDC包含了一序列图形设备接口(GDI)命令,可以用来创建需要的图像或文本。
CDC、CClientDC和CWindowDC最容易混淆,下面具体区分一下这三者之间的异同。

三、CDC、CClientDC和CWindowDC的使用——客户区与非客户区

以vs2010编辑器为例,图中蓝色部分为窗体框架的客户区,蓝色的部分外侧为窗体框架的非客户区(包括程序图标,标题栏,菜单,最大最小,关闭按纽和状态栏);图中绿色部分为文档视图的客户区,绿色部分外侧为文档视图的 非客户区(包括文件图标,标题栏和两个滚动条)。
这里写图片描述

弄清楚了窗体的客户区和非客户区,CDC、CClientDC和CWindowDC三者的使用就很简单了,CDC适用于显示设备或窗体客户区;CClientDC只能用于窗体客户区;CWindowDC适用于CWnd整个窗口。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值