MFC中CDC、CClientDC、CWindowDC、CPaintDC、CMetaFileDC 的区别

1. CDC

MFC画图的基础类,使用前需先调用GetDC()获得CDC作图指针,使用结束调用ReleaseDC()释放掉获取的指针;

2. CClientDC

此类派生于CDC类,其构造函数中会调用GetDC,析构函数中调用了ReleaseDC。定义时,传入CWnd指针初始化后,即可以使用,而不需要获得、释放DC。

CClientDC dc(this);

在文档视图结构中,当this为视图类指针,则CClientDC只能在视图类的客户区作图;当this为视图类的父指针,即CMainFrame类型的指针时,则还可以在框架窗口的客户区(工具栏)作图。

3. CWindowDC

此类派生于CDC类,其构造函数中会调用GetDC,析构函数中调用了ReleaseDC。定义时,传入CWnd指针初始化后,即可以使用,而不需要获得、释放DC。

CWindowDCdc(this);

在文档视图结构中,当this为视图类指针,则CClientDC只能在视图类的客户区作图;当this为视图类的父指针,即CMainFrame类型的指针时,则还可以在框架窗口的客户区(工具栏)与非客户区(标题栏、菜单栏)作图。

4. CPaintDC

此类派生于CDC类,只能用于用于OnPaint函数中(OnPaint中会调用OnDraw)。如果直接在OnPaint函数中使用DC,首先需要使用BeginPaint获得DC句柄,使用完毕后调用EndPaint。而CPaintDC类在在构造函数中调用了BeginPaint,在析构函数中调用了EndPaint。

5. CMetaFileDC

此类派生于CDC类,可以保存一些列作图命令在内存画布中。需要显示的时候再播放出来。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值