VC中CDC与HDC的区别以及二者之间的转换

CDC是MFC的DC的一个类

HDC是DC的句柄,API中的一个类似指针的数据类型.

MFC类的前缀都是C开头的

H开头的大多数是句柄

这是为了助记,是编程读\写代码的好的习惯.

CDC中所有MFC的DC的基类.常用的CClientDC dc(this);就是CDC的子类(或称派生类).

CDC等设备上下分类,都含有一个类的成员变量:m_nHdc;即HDC类型的句柄.

记住下面的一句话,会有助于你的理解.

MFC的类,是在用window API语句开发出来的有一定功能的小程序.(也可称为类).使用它的默认方法,就是,记住它的名字与参数(可以用笔记,代替脑记).

如果将window api比做汇编语言

那么MFC就相当于Basic语言.

cdc是设备描述表的基类,clientDC指代客户区的设备描述表,PaintDC只用于OnPaint()函数中

HDC是WINDOWS的一种数据类型,是设备描述句柄。

而CDC是MFC里的一个类,它封装了几乎所有的关于

HDC的操作。

也可以这样说,HDC定义的变量指向一块内存,这块

内存用来描述一个设备的相关的内容,所以也可以

认为HDC定义的是一个指针;而CDC类定义一个对象,

这个对象拥有HDC定义的一个设备描述表,同时也包

含与HDC相关的操作的函数。

这与HPEN和CPen,POINT与CPoint之间的差别是一样

的。

CDC 到HDC 的转化:

2007-05-09 12:04

方法一: 此方法在设备结束时不会销毁原来的资源(即:hDC,hBitmap)

CDC *pDC = CDC::FromHandle(hDC);

CBitmap *pBitmap = CBitmap::FromHandle(hBitmap);

方法二: 此方法在设备结束时会销毁原来的资源(即:hDC,hBitmap)

CDC dc;

dc.Attach(hDC);

CBitmap bit;

bit.Attach(hBitmap);

在结束的时候加dc.detach()也不会销毁原来资源

HDC hdc;

CDC cdc;

cdc到hdc

hdc = cdc.GetSafeHdc();

hdc到cdc

cdc.Attach(hdc);

回复于 2004-04-08 17:46:03 得分 20

HDC hdc;

CDC cdc;

cdc到hdc

hdc = cdc.GetSafeHdc();

hdc到cdc

cdc.Attach(hdc)

回复于 2004-04-08 17:49:14 得分 15

CDC 是MFC中的类

而HDC是Handle

使用

HDC GetDC()

回复于 2004-04-08 17:51:49 得分 0

CDC cdc;

HDC hDC = cdc.m_hDC

回复于 2004-04-08 17:54:20 得分 20

CDC dc;

HDC hDC = dc.m_hDC

dc.FromHandle(hDC);

回复于 2004-04-08 18:01:51 得分 10

CDC to hdc

用成员变量m_hDC

hdc to CDC

用FromHandle

回复于 2004-04-08 18:02:47 得分 10

dc.FromHandle(hDC)产生一个dc,但是是临时的,mfc不保证系统在什么时候删除dc.

dc.Attach(hDC)是永久的,直到这个dc的生命正常结束。

回复于 2004-04-08 18:05:21 得分 5

以上的都很对。你就查找替换。将所有的(hdc,替换为pdc->(当然。前面声明个

pdc就可以了。

VC中CDC与HDC的区别以及二者之间的转换

时间: 2024-11-16 21:08:13

VC中CDC与HDC的区别以及二者之间的转换的相关文章

VC++ 中CDC与HDC的区别以及二者之间的转换

MFC类的前缀都是C开头的 H开头的大多数是句柄 这是为了助记,是编程读\写代码的好的习惯. CDC中所有MFC的DC的基类.常用的CClientDC dc(this);就是CDC的子类(或称派生类). CDC等设备上下分类,都含有一个类的成员变量:m_nHdc;即HDC类型的句柄. 记住下面的一句话,会有助于你的理解. MFC的类,是在用window API语句开发出来的有一定功能的小程序.(也可称为类).使用它的默认方法,就是,记住它的名字与参数(可以用笔记,代替脑记). 如果将window

CDC与HDC的区别以及相互转换

CDC是MFC的DC的一个类 HDC是DC的句柄,API中的一个类似指针的数据类型. MFC类的前缀都是C开头的 H开头的大多数是句柄 这是为了助记,是编程读\写代码的好的习惯. CDC中所有MFC的DC的基类.常用的CClientDC dc(this);就是CDC的子类(或称派生类). CDC等设备上下分类,都含有一个类的成员变量:m_nHdc;即HDC类型的句柄. 记住下面的一句话,会有助于你的理解. MFC的类,是在用window API语句开发出来的有一定功能的小程序.(也可称为类).使

java中的、标识符、运算符以及数据类型之间的转换。

---恢复内容开始--- 数据类型之间的转换: 1:自动转换:就是不用说出要转换成什么类型,由java中的虚拟机自动将小数据类型转换成大数据类型,但大数据中的数据精度有可能被破坏. 2:强制转换:强制转换的格式是在需要转型的数据前加上"( )",然后在括号内加入需要转化的数据类型.有的数据经过转型运算后,精度会丢失,而有的会更加精确. 例子: public class Demo { public static void main(String[] args){ int x; doubl

【编程拾遗】VC++中LPCTSTR、CString、char *、string之间的相互转换

字符集 在VC2012中,字符集默认采用Unicode字符集(Use Unicode Charecter Set选项),其值还可以设置为多字节字符集(Use Multi-Byte Charecter Set). 为什么要使用Unicode 可以很容易地在不同语言之间进行数据交换. 使你能够分配支持所有语言的单个二进制.exe文件或DLL文件. 提高应用程序的运行效率. Windows 2000是使用Unicode从头进行开发的,如果调用任何一个Windows函数并给它传递一个ANSI字符串,那么

VC中BSTR、Char*、CString和CComBSTR类型的转换

原文:http://blog.csdn.net/wanghaihao_1/article/details/37498689 1.char*转换成CString 若将char*转换成CString,除了直接赋值外,还可使用CString::format进行.例如: char* p = "This is a test"; 或CString theString = p;theString.format("%s", p);theString = p; 2.CString转换

python中数组,元组,字典和字符串之间的转换

1.字典 字典转为字符串 >>> dict={'name':'zhzhgo','age':25} >>> print type(str(dict)),str(dict) <type 'str'> {'age': 25, 'name': 'zhzhgo'} >>> 字典转为元组 >>> dict={'name':'zhzhgo','age':25} >>> print type(tuple(dict)),t

java中,Date数据类型和JSONObject数据类型之间的转换

import java.text.SimpleDateFormat;import java.util.Date;import net.sf.json.JSONObject; public class DateTest { public static void main(String[] args) { Date d = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"

MFC的运行机制 以及 MFC中的DC、CDC、HDC、句柄、设备上下文 [转]

在MFC程序中,我们并不经常直接调用Windows API,而是从MFC类创建对象并调用属于这些对象的成员函数.也就是说MFC封装了Windows API.你说你喜欢C++而MFC换一种说法就是一个用C++写的一个函数库 然后你来调用 只不过这个类不是你写的 MFC提供数百个类,最重要的.也是编写任何VC++应用程序都必不可少的两个类CWinApp和CFrameWnd,这两个类是编写复杂庞大应用程序的基石. 1>封装特性:构成MFC框架的是MFC类库而MFC类库又是C++的一个类库.这些类封装W

MFC中的DC,CDC和HDC

       设备描述表(DC)是Windows中的一种数据结构,它包含GDI需要的所有关于显示界面情况的描述字段,包括相连的物理设备和各种各样的状态信息. 图形显示功能是由显卡来完成的,你想要利用显卡的图形显示功能来完成你的图形输出,怎么办,给你一块硬件能用吗?好,现在厂商给你提供一个驱动程序,给你一些调用的接口,你就可以访问了吧.但这种访问是在驱动层,很麻烦,更麻烦的是,每个厂商给自己显卡提供的驱动程序还不一样,那我们写的图形输出程序岂不是换台机器(不一样的显卡)就得修改,一个字:累,两个字