MFC中的各种DC区别
转载自:xntop的《区别MFC中的CClientDC、CWindowDC、CPaintDC、CMetaFileDC》
CClientDC及其子类
1. CClientDC类只能在客户区绘图;
2. 所谓客户区指窗口区域中去掉边框、标题栏、菜单栏、工具栏、状态栏等之外的部分,它是用户可以操作的区域;
3. 在使用CClientDC进行绘图时,一般要调用GetClientRect()函数来获取客户区域的大小;
4. CClientDC类在构造函数中调用Windows API函数GetDC(),在析构时响应ReleaseDC();
5. CClientDC类的窗口句柄保存在成员变量m_hWnd,为构造CClientDC,需将CWnd作为参数传递给构造函数。
CWindowDC及其子类
1. CWindowDC对象在构造时调用Windows API函数GetWindowDC,在析构时调用相应的API函数ReleaseDC,这意味着CWindowDC对象可访问CWnd所指向的为整个全屏幕区域;
2. CWindowDC允许在显示器的任意位置绘图。坐标原点在整个窗口的左上角。
3. 在使用CWindowDC进行绘图时,一般要调用GetWindowRect函数来获取整个应用程序窗口区域的大小;
4. CWindowDC类的窗口句柄保存在成员变量m_hWnd,为构造CClientDC,需将CWnd作为参数传递给构造函数。
CPaintDC及其子类
1. 通常CPaintDC用来响应WM_PAINT消息。一般应用在OnPaint函数.
2. CClientDC也是从CDC派生出来的.构造时自动调用GetDC函数,析构时自动调用ReleaseDC函数.一般应用于客户区窗口的绘制.
3. CPaintDC只能在WM_PAINT消息中使用, 用于有重画消息发出时才使用的内存设备环境, 而CClientDC和客户区相关,有重画消息发出时才使用的内存设备环境, 可在任何地方使用.
4. 在处理窗口重画时,必须使用CPaintDC,否则WM_PAINT消息无法从消息队列中清除,将引起不断的窗口重画。
CMetaFileDC及其子类
1. 在应用程序中,有一些图像是需要经常重复显示的.这样的图形最好事先绘制好形成一个文件,并存储在内存中,当用到它时直接打开就可以了,这种图形文件叫做图元文件;
2. 制作图元文件需要一个特殊的设备描述环境CMetaFileDC类.它也是由CDC类继承来的,因此它包含了CDC类的所有绘图方法。
3. 一般先在视图类的OnCreate()函数中创建图元文件.具体做法为:先定义一个CMetaFileDC类的对象,然后用该对象的Create()函数创建它,该函数的原型为:BOOL Create(LPCTSTR lpszFilename=NULL);
4. 接下来使用由CDC继承来的绘图方法绘制图元文件,最后使用Close()函数结束绘制并保存该图元文件到类的数据成员中(该数据成员的类型应为HMETAFILE)。
5. 当需要显示该图元文件时,使用CDC类的成员函数PlayMetaFile()。当不再使用该图元文件时,要用函数DeleteMetaFile()将其删除。
MFC中的各种DC区别的更多相关文章
- MFC中设备描述表dc的使用
以下代码我是在View类中实现的: /** 利用平台SDK实现画线功能 // 首先获得窗口的设备描述表 HDC hdc; hdc = ::GetDC( m_hWnd ); //调用的是平台SDK的成员 ...
- MFC中的Invalidate、OnDraw、OnPaint函数的作用
MFC中的Invalidate.OnDraw.OnPaint函数的作用 CWnd::Invalidate voidInvalidate( BOOL bErase = TRUE ); 该函数的作用是使 ...
- MFC中的一般经验之谈3
Window消息可以分为三类:(1)标准Window消息(CWnd子类处理),(2)控制通知消息(CWnd子类处理),(3)命令消息(应用中的5类都可以).所有派生自CCmdObjec对象的类都可以处 ...
- 在MFC中添加OpenGL窗口
虽然MFC已经落伍好多年,而且用来做界面非常的不好用...但是我既不会C#也不会QT,又需要使用OpenGL,就只能将就用了... 一.首先介绍Windows图像程序设计中几个重要的概念: G ...
- MFC中添加消息响应函数
转自:http://blog.csdn.net/eddy_liu/article/details/8474677 目前,用MFC设计的Windows应用程序几乎都采用文档/视图结构.这种程序框架与简单 ...
- VC、MFC中设置控件的背景色、标题、字体颜色、字体要注意的地方[转]
在MFC中设置控件的背景色.字体.字体颜色.标题等属性主要是利用OnCtlColor函数来实现. 如: HBRUSH CAlarm::OnCtlColor(CDC* pDC, CWnd* pWnd, ...
- MFC中状态栏显示鼠标坐标位置
原文:MFC中状态栏显示鼠标坐标位置,蝈蝈 1,利用MFC向导创建一个应用工程ewq. 2,打开ResourceView,右击Menu菜单,插入Menu,在空白处双击,Caption中填入Point. ...
- 不使用CvvImage类来在MFC中显示图像
/* * ===================================================================================== * * Filen ...
- 【转】MFC中调试过程中查看输出信息 -- 不错
原文网址:http://blog.sina.com.cn/s/blog_4e24d9c501014o39.html 笔记&&方便查阅. ~~~~~~~~~~~~~~~~~~~~~~~~ ...
随机推荐
- WCF初探-4:WCF消息交换模式之请求与答复模式
请求与答复模式( Request/Reply) 这种交换模式是使用最多的一中,它有如下特征: 调用服务方法后需要等待服务的消息返回,即便该方法返回 void 类型 相比Duplex来讲,这种模式强调的 ...
- iOS开发UI篇—无限轮播(新闻数据展示)
iOS开发UI篇—无限轮播(新闻数据展示) 一.实现效果 二.实现步骤 1.前期准备 (1)导入数据转模型的第三方框架MJExtension (2)向项目中添加保存有“新闻”数据的pli ...
- bzoj 3170: [Tjoi 2013]松鼠聚会
#include<cstdio> #include<iostream> #include<algorithm> #define M 100008 using nam ...
- Mike的农场 (BZOJ 4177)
题目大意: 给N个东西分AB类,分到A类和B类分别得到相应的钱记为A[i],B[i],然后有一些冲突关系<x,y,z>,如果物品x,y不同类需要付出z的钱.还有一些外快<S,x,y& ...
- redhat6.4安装storm集群-4节点
0.搭建ftp服务器并建立yum源 1.在每个节点上安装java并设置环境变量 2.在三个节点上安装zookeeper 3.安装zeromq 过程中发现运行./configure时出现问题: conf ...
- js动画之简单运动一
虽然现在css3已经有了很多动画效果希望后面有时间也写一些博客,但是先开始我们的基础动画的学习. 1.制作动画常用的属性就是left,right,height,width,opacity等属性 2.因 ...
- PB中用oracle的存储过程返回记录集做数据源来生成数据窗口,PB会找不到此存储过程及不能正常识别存储过程的参数问题(转)
(转)在PB中用oracle的存储过程返回记录集做数据源来生成数据窗口 首先oracle的存储过程写法与MSSQL不一样,差别比较大. 如果是返回数据集的存储过程则需要利用oracle的包来定义游标. ...
- 【matlab】MATLAB程序调试方法和过程
3.8 MATLAB程序的调试和优化 在MATLAB的程序调试过程中,不仅要求程序能够满足设计者的设计需求,而且还要求程序调试能够优化程序的性能,这样使得程序调试有时比程序设计更为复杂.MATLAB ...
- springmvc学习第四天
数据类型的转换.格式化.校验 1.数据绑定流程 1. Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创 ...
- html页面的head标签下
head区是指首页html代码的<head>和</head>之间的内容. 必须加入的标签 1.公司版权注释 <!--- the site is designed b ...