CDC和HDC的区别与转换
CDC和HDC的区别与转换
一、区别与联系
HDC是句柄;CDC是MFC封装的Windows 设备相关的一个类;CClientDC是CDC的衍生类,产生对应于Windows客户区的对象
HDC是WINDOWS的一种数据类型,是设备描述句柄。
而CDC是MFC里的一个类,它封装了几乎所有的关于HDC的操作。
也可以这样说,HDC定义的变量指向一块内存,这块 内存用来描述一个设备的相关的内容,所以也可以 认为HDC定义的是一个指针;而CDC类定义一个对象, 这个对象拥有HDC定义的一个设备描述表,同时也包 含与HDC相关的操作的函数。
这与HPEN和CPen,POINT与CPoint之间的差别是一样的。
二、获得CDC *
CDC* pDC
pDC=GetDC();
三、获得hdc
HDC hDC;
1,hDC=GetDC(pCxp->hWnd);
2,pDC->m_hDC;
3,
MEMDCXP Mdcxp;
GetMemDCXP(&Mdcxp);
hDC = Mdcxp.hMemDC;
4,hDC=::GetDC(HWND handle)
四、转换
CDC* pDC
HDC hDC;
pDC=Attach(hDC);
hDC=GetSafeHDC(pDC);
pDC->m_hDC==hDC
CDC、HDC、pDC
1.CDC *pDC和HDC hdc有什么不同,类似的有CWnd *pWnd和HWnd?
pDC是类指针
HDC是windows句柄
通过pDC获得hdc:
HDC hdc=pDC->GetSafeHdc();
通过hdc获得pDC:
CDC *pDC=new CDC;
pDC->Attach(hdc);
2.hDC和CDC有本质区别
HDC是WINDOWS的一种数据类型,是设备描述句柄。而CDC是MFC里的一个类,它封装了几乎所有的关于HDC的操作。也可以这样说,HDC定义的变量指向一块内存,这内存用来描述一个设备的相关的内容,所以也可以认为HDC定义的是一个指针;而CDC类定义一个对象,这个对象拥有HDC定义的一个设备描述表,同时也包含与HDC相关的操作的函数。这与HPEN和CPen,POINT与CPoint之间的差别是一样的。
CDC是对hDC的相关操作进行封装,例如CDC的一个TextOut函数隐去其错误检测,完全可以简化到这样程度CDC:TextOut( int x, int y, const CString& str )
{
TextOut( m_hDC, x, y, (LPCTSTR)str, str.GetLength() );
}
m_hDC就是CDC的成员变量HDC m_hDC;
CDC有一个operator HDC() const { return m_hDC; }
你可以把它当成一个HDC使用
3.this是dc输出目标窗口的指针,通过它可以得到窗口句柄,对象带参构造这有什么奇怪的呢?
CPaintDC 无效区dc,相当于BeginPaint, EndPaint
CClientDC 客户区dc,相当于GetDC, ReleaseDC
CWindowDC 整窗口dc, 相当于GetWindowDC, ReleaseDC
CDC 任何dc, 相当于CreateDC, DeleteDC
CDC和HDC的区别与转换的更多相关文章
- VC++ 中CDC与HDC的区别以及二者之间的转换
MFC类的前缀都是C开头的 H开头的大多数是句柄 这是为了助记,是编程读\写代码的好的习惯. CDC中所有MFC的DC的基类.常用的CClientDC dc(this);就是CDC的子类(或称派 ...
- VC中CDC与HDC的区别以及二者之间的转换
CDC是MFC的DC的一个类 HDC是DC的句柄,API中的一个类似指针的数据类型. MFC类的前缀都是C开头的 H开头的大多数是句柄 这是为了助记,是编程读\写代码的好的习惯. CDC中所有MFC的 ...
- CDC与HDC的区别以及相互转换
CDC是MFC的DC的一个类 HDC是DC的句柄,API中的一个类似指针的数据类型. MFC类的前缀都是C开头的 H开头的大多数是句柄 这是为了助记,是编程读\写代码的好的习惯. CDC中所 ...
- 通过CDC获取 HDC
通过CDC获取HDC 通过CDC(设备描述表)获取HDC(设备上下文句柄)的方法: //第一种 void ...::OnDraw(CDC *pDC) { ...... HDC hDC=pDC-> ...
- jquery对象和DOM对象的区别和转换
jquery对象和DOM对象的区别和转换 在使用jquery时,我们直接通过jq的选择器获取元素,然后对元素进行操作,用jq选择器获取到的对象是一个jq对象,jq对象能够使用jq提供的方法,但是不能用 ...
- 【转】CString与string、char*的区别和转换
我们在C++的开发中经常会碰到string.char*以及CString,这三种都表示字符串类型,有很多相似又不同的地方,常常让人混淆.下面详细介绍这三者的区别.联系和转换: 各自的区别 char*: ...
- CWnd与HWND的区别与转换
CWnd与HWND的区别与转换 2011-10-20 10:29:30| 分类: VC学习库|字号 订阅 一.区别HWND是句柄,CWnd是MFC窗体类,CWnd中包含HWND句柄成员对象是 ...
- JQuery学习:jquery对象和js对象区别和转换
JQuery对象与JS对象区别与转换 1.JQuery对象在操作时,更加方便 2.JQuery对象和js对象方法不通用 3.两者相互转换 * jq -- > js:jq对象[索引] 或者 ...
- python学习笔记(18)字典和json 的区别 和转换
字典和json 的区别 和转换 前言:字典和json非常像.接下来比较一下两者的异同 先看一下字典的写法: a = {'a':'1', 'b':'2', 'c':'3' } 再看一下json的写法: ...
随机推荐
- 在Ubuntu 12.4 下安装 nginx, MySQL, PHP
LNMP是时下很流行的网站配置,我在配置蝉大师服务器的时候顺带把经验做个分享,蝉大师的网址是:http://www.ddashi.com/ 1.第一步, 跟新apt-get 输入: sudo apt- ...
- iOS信号量的使用
Core Audio render thread and thread signalling up vote2down votefavorite Does iOS have any kind of ...
- Page 指令的各个属性及其功能
转载:http://www.cnblogs.com/elleniou/archive/2012/09/09/2678101.html 语法规则: <@%page attribute1=”valu ...
- Nginx+PHP优化实例
1.PHP-FPM高负载的解决办法 http://blog.haohtml.com/archives/11162 2.Nginx优化配置 http://blog.haohtml.com/archive ...
- 我对git认识
Git --- The stupid content tracker, 傻瓜内容跟踪器.Linus Torvalds 是这样给我们介绍 Git 的. Git 是用于 Linux内核开发的版本控 ...
- Flex box弹性布局 及 响应式前端设计的优化
Flex box弹性布局 Flex box是CSS3新添加的一种模型属性,它的出现有力的打破了我们常常使用的浮动布局.实现垂直等高.水平均分.按比例划分,可以实现许多我们之前做不到的自适应布局.如果你 ...
- jquery怎么获取radio选中的值
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JUnit3的作用
简要说JUnit的4大功能 1. 管理测试用例.修改了哪些代码,这些代码的修改会对哪些部分有影响,通过JUnit将这次的修改做个完整测试.这也就JUnit中所谓的TestSuite. 2. 定义测试代 ...
- Hammer.js--转载自李林峰的园子
一.前言 移动端框架当前还处在初级阶段,但相对于移动端的应用来说已经有很长时间了.虽然暂时还没有PC端开发的需求量大,但移动端的Web必然是一种趋势,在接触移动端脚本的过程中,最开始想到的是juqer ...
- Apache+PHP+MySQL
Apache:是一种web服务器(与IIS类同)PHP:全称为Hypertext Preprocessor.PHP是一种HTML 内嵌式的语言,是一种网站(网页)开发语言(与ASP.JSP..NET等 ...