高手解释一下Attach()和Detach得用法,谢谢。
看别人得程序,常用到attach()和detach()(cwnd的)。
不明白这两个函数有什么用,
在什么场合需要使用这两个函数。
请高手给解释一下,谢谢。
推荐阅读
attach()就是将windows窗口句柄与cwnd对象相连接
通常用在已存在内存实例对象与cwnd对象相连接
只样的意思是实例对象已被创建,但没有相对应的抽象类给以操作,用cwnd连接后就以cwnd对象来替代实例对象操作
detach()是相反操作
^o^
up
就是这个意思
attach是连接的意思,在很多地方都可以看到
如在office自动化编程里,attach可以连接一个已被打开的文档
mfc把一些东西的句柄给包装起来了,然后把相关的操作都提供给用户,这就形成了相关的一些类和操作,像cmemu,cwnd等都是这么包装的,attach就是把一个句柄包装成一个对象,detach刚好相反,把句柄从对象里面卸下来.
要明白attch(),首先你要明白c++类对象(mfc类对象)和句柄之间是由区别的,当然你要明白句柄的含义。可以几个例子.
cwnd wnd;//这里声明了一个cwnd类的对象,也就是在内存中分配了一段内存,存的就是一个cwnd对象。
window中把每一个实际存在的窗口都用一个句柄表示handle.handle说白了就是指针的指针。
如果你需要将你声明的cwnd类对象和一个window实例联系起来,就需要用attch().
给个建议:多看看例子,多理解一下,就明白了。
mfc中每一个cwnd类的对象对应了一个句柄,并且只能对应一个句柄。
mfc在内部维护了一个hwnd到cwnd类的映射表。可以查找哪个hwnd对应哪个cwnd类的对象。
如: cwnd* pwnd = cwnd::fromhandlepermanent(hwnd);
也可以为某个hwnd 建立一个暂时的对象,如cwnd* pwnd = cwnd::fromhandle(hwnd);
这个对象将在程序的空闲时间被删除。
还有一句要说的,就是并不是每一个hwnd都有一个对象与之对应。
attach就是装箱操作,把一个句柄包装成一个对象;而detach就是拆箱操作,把句柄从对象里面卸下来,我是这样理解的。


讨论区