博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Attach()函数和Detach()函数的作用
阅读量:5929 次
发布时间:2019-06-19

本文共 832 字,大约阅读时间需要 2 分钟。

基本就是把一个句柄绑定和解绑定于一个类对象上,是其可以使用MFC的函数而不是API

首先,你要明白Windows对象和MFC对象的区别。MFC对象实际上并没有把整个Windows对象都包装在其中,它只是有一个窗口句柄而已,这个窗口句柄如果指向一个实际存在的窗口对象(窗口对象,也就是WNDCLASS,是一个Windows对象),那么这个MFC对象就是有效的,否则这个MFC对象是空的。如果你还不明白,请回忆一下,当我们使用MFC创建一个窗口时,是分两步进行的,第一步,new一个CWnd对象,这一步是创建MFC对象,但是其中的HWND还是非法的,因为对应的Windows对象还没有被创建出来;第二步,调用CWnd的成员函数Create创建真正的Windows对象,同时,把先前创建的MFC的CWnd对象的HWND成员指向该窗口,这样才算创建完毕一个窗口。而如果你是用SDK方式,那么只要创建一个WNDCLASS结构,然后调用Create或者CreateEx就创建了一个窗口。

好,现在回答你的问题,你可以假设,现在你已经有了一个有效窗口句柄,那么你想把这个窗口和一个CWnd对象关联起来怎么办?很简单,用Attach,其实就是让一个CWnd对象的HWND成员指向这个窗口句柄。这就是Attach主要完成的任务。
第二个,关于Detach。如前所述,WNDCLASS其实和CWnd根本没有什么关系。它们之间只是通过CWnd的成员HWND联系起来的。如果把Attach看做“联姻”的话,那么Detach就是“离婚”了,通俗地说,就是切断一个CWnd对象和一个有效窗口的脐带。为什么要切断呢?因为CWnd是C++的对象,C++的对象有一个生存期的概念,脱离了该对象的作用域,这个对象就要被销毁,但是Windows对象没有这个特点,当销毁CWnd对象的时候,我们不一定希望WNDCLASS一起被销毁,那么在此之前,我们就先要把这个“脐带”剪断,以免“城门失火,殃及池鱼”。

转载地址:http://rcktx.baihongyu.com/

你可能感兴趣的文章
Java并发同步工具类之CountDownLatch
查看>>
SpringBoot使用yaml作为配置文件之坑
查看>>
WebScoket支持safari+chrome+firefox的规范和协议
查看>>
php的setcookie函数出现Warning: Warning: Cannot modify h
查看>>
SpringBoot MongoDB 实现事物处理 (windows环境下的副本集创建)
查看>>
Java生成固定格式word并打印word文档解决方案【windows环境】
查看>>
企业文化的作用
查看>>
Linux中的web应用连接windows上的postgresql数据库
查看>>
java service Wrapper配置-D设置外部文件路径提供spring使用
查看>>
bash: bad interpreter: No such file or directory
查看>>
OpenStack Identity Service 身份认证服务——KeyStone
查看>>
共享无线网卡热点给手机上网(win7)
查看>>
OpenLayers IE 6 下 PNG 图片显示问题
查看>>
spring自定义事件和事件监听器以及事件的发布-ApplicationEvent
查看>>
一些前端开发的资源
查看>>
分布式系统基础
查看>>
poj1015 Jury Compromise - dp,背包模型
查看>>
线性表顺序存储-练习题2
查看>>
IOS——关于UIView的autoresizingMask属性的研究
查看>>
KSImageNamed-Xcode-master
查看>>