VC中的Attach和Detach

CWnd,CDC, Cxxx等都是MFC的类,这些类提供了很多成员函数来执行系统调用等操作,但是核心的类成员数据都是 句柄,
(包括窗口句柄,DC句柄,线程句柄等)。  m_hWnd  m_hDC  m_hThread    如果这些类对象的这些句柄为空,就表示无效对象。
比如你 CWnd * pWnd = new CWnd,执行是合法的,但是没有Create就没有窗口句柄,基本上就是一个无效对象,只是系统内存申请了内存分配空间而已,
很多操作都无法执行(debug模式下会出现断言错误窗口)。  但是,假如你申请了一个CWnd,CDC的对象实体,
可以使用Attach来指定一个有效的句柄付给这个对象。那么此对象就是Valid的了。你可能跟踪看看Attach的实现,其实就是给m_hxxx赋值,而Detach就是值复位。
  这2个操作没有申请内存释放内存操作,就是一个赋值而已,是不是成对使用看你代码的实际情况吧。只要理解了这2函数的意义就行了  
 其实CWnd,CDC等类就是多了一个包装,方便用户(程序开发者)使用,如果用SDK开发,完全可以实现一样的功能。   
句柄是操作系统内核对象,而窗口指针、DC指针是用户对象(由你的程序管理)。

时间: 2025-01-21 09:14:41

VC中的Attach和Detach的相关文章

VC++中图像处理类CBitmap的用法_C 语言

VC++中图像处理类CBitmap的用法 class CBitmap : public CGdiObject { DECLARE_DYNAMIC(CBitmap) public: static CBitmap* PASCAL FromHandle(HBITMAP hBitmap); // Constructors CBitmap(); BOOL LoadBitmap(LPCTSTR lpszResourceName); BOOL LoadBitmap(UINT nIDResource); BOO

VC++中动态生成菜单技巧

下载源代码 一.前言    在实际运用中,经常需要根据操作来增减菜单和菜单项.在VC++开发环境下,动态生成菜单的方法有多种.例如:可以利用资源编辑器创建菜单资源,然后在程序运行中动态加入菜单,这种动态生成菜单的方法比较常见,运用比较多.用这种方法动态增加菜单时,首先需要在Resource.h中添加菜单ID:由于是动态生成的菜单选项,所以要实现它的功能就不能在ClassWizard中映射函数了,需要在头文件中手动添加消息函数原型,在代码文件中手动添加消息映射和添加消息响应函数.动态生成菜单的另一

VC++中的字体设置方法详解_C 语言

VC++中static text字体改变 窗口都有2个和字体有关的函数:CWnd::GetFont()和SetFont(CFont*, BOOL);1)CFont* pFont = m_static.GetFont(); 2)LOGFONT LogFont;pFont->GetLogFont(&LogFont); 3)对LogFont直接操纵修改里面的字体选项 //如LogFont.lfUnderline = 1;设置下划线 LogFont.lfHeight=30;       //字体大小

VC中的界面美化

本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者.读者最好具有以下VC基础: 1. 大致了解MFC框架的基本运作原理: 2. 熟悉Windows消息机制,熟悉MFC的消息映射和反射机制: 3. 熟悉OOP理论和技术: 本文根据笔者多年的开发经验,并结合简单的例子一一展开,希望对读者有所帮助.  正文1. 美化界面之开题篇相信使用过<金山毒霸>.<瑞星杀毒>软件的读者应该还记得它们的精美界面:     图1 瑞星杀毒软件的精美界面程序的功能如何如何强大是一回事,它的用户界面

源码-求教一个vc中float转化的问题!

问题描述 求教一个vc中float转化的问题! 50C buffer[0] = 0xc6;buffer[1] = 0xc3;buffer[2] = 0x90;buffer[3] = 0x30; 哪位大神能给了源码吗,谢谢了!!不会搞,急死了! 解决方案 请教一个VC问题 解决方案二: 数据的在计算机中不是用二进制表示的嘛,4位16进制就需要用32位二进制来表示:然后低字节存地位,高字节存高位,也就是传说中的"小端模式":这个不需要什么源码,理解到了就行:理解不到就去看书 解决方案三:

在VC中使用MATLAB C/C++函数库

MATLAB广泛应用于线性代数.自动控制理论.数理统计.数字信号处理.时间序列分析.动态系统仿真等领域.因此如果在VC中对MATLAB进行调用将大大减少编程的工作量.保证程序的准确性,并且继承了VC++强大的功能,提高开发效率,本文将介绍了在VC中使用MATLAB函数库的具体步骤: 在VC中建立一个项目后: 1.设置: 添加路径: 在project-settings-c/C++-category:-preprocessor-Additional include directories:栏目中添加

VC++中利用MSXML解析XML文档

c++|xml 四.程序实现 下面通过一个具体的实例来说明在VC++中如何利用MSXML解析XML文档. (1)源XML文档(xmlfile.xml)如下: <?xml version="1.0" encoding="GB2312"?> <Device id="10041" name="设备1"> <Type>13</Type> <TypeName>保护</Ty

VC中的图片单击事件Picture Control

VC 中Picture Control 添加图片和单击事件,比C#等语言稍微较麻烦 一.添加图片 1.在窗体添加Picture Control控件 2.代码添加图片 HBITMAP hBmpWSUS = (HBITMAP)LoadImage (AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BITMAP_WSUS), IMAGE_BITMAP, 0, 0, LR_LOADMAP3DCOLORS); // 关联图片ID HBITMAP hBmpVIRUS =

VC中的图象打印问题

我终于完成了对图象的打印操作,在此,将其全部奉上,以满足与我有同样经历的朋友的需要.在这里,我要特别感谢VCKbase中的LiuRong! 另外,由于这是我的第一篇文章 ,难免有不尽人意之处,欢迎大家提出批评和建议,先谢谢啦. VC中的图象打印一般有两种方法: 一.选定打印设备环境后,用DrawState可以将图象打印出来,这可以用于资源中图象 的打印输出,比较简单,不再多说. 二.窗口内容的打印,这是本文的重点,也是我遇到的最大的问题,下面我主要介绍 这种打印: 1.工程简单介绍 建立一个基于