高手解释一下Attach()和Detach得用法,谢谢。

harrypotter 2003-08-10 05:23:52
看别人得程序,常用到Attach()和Detach()(CWnd的)。
不明白这两个函数有什么用,
在什么场合需要使用这两个函数。

请高手给解释一下,谢谢。
...全文
1213 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
limd 2003-08-12
  • 打赏
  • 举报
回复
Attach就是装箱操作,把一个句柄包装成一个对象;而Detach就是拆箱操作,把句柄从对象里面卸下来,我是这样理解的。
sunyuan_01 2003-08-11
  • 打赏
  • 举报
回复

Attach()就是将WINDOWS窗口句柄与CWnd对象相连接
通常用在已存在内存实例对象与CWnd对象相连接
只样的意思是实例对象已被创建,但没有相对应的抽象类给以操作,用CWnd连接后就以CWnd对象来替代实例对象操作
Detach()是相反操作
yndfcd 2003-08-11
  • 打赏
  • 举报
回复
还有一句要说的,就是并不是每一个HWND都有一个对象与之对应。
yndfcd 2003-08-11
  • 打赏
  • 举报
回复
MFC中每一个CWnd类的对象对应了一个句柄,并且只能对应一个句柄。
MFC在内部维护了一个HWND到CWnd类的映射表。可以查找哪个HWND对应哪个CWnd类的对象。
如: CWnd* pWnd = CWnd::FromHandlePermanent(hwnd);
也可以为某个HWND 建立一个暂时的对象,如CWnd* pWnd = CWnd::FromHandle(hwnd);
这个对象将在程序的空闲时间被删除。
houdy 2003-08-11
  • 打赏
  • 举报
回复
要明白Attch(),首先你要明白C++类对象(MFC类对象)和句柄之间是由区别的,当然你要明白句柄的含义。可以几个例子.
CWnd wnd;//这里声明了一个CWnd类的对象,也就是在内存中分配了一段内存,存的就是一个CWnd对象。
Window中把每一个实际存在的窗口都用一个句柄表示HANDLE.HANDLE说白了就是指针的指针。
如果你需要将你声明的CWnd类对象和一个Window实例联系起来,就需要用Attch().
给个建议:多看看例子,多理解一下,就明白了。
numen27 2003-08-11
  • 打赏
  • 举报
回复
MFC把一些东西的句柄给包装起来了,然后把相关的操作都提供给用户,这就形成了相关的一些类和操作,像CMemu,CWnd等都是这么包装的,Attach就是把一个句柄包装成一个对象,Detach刚好相反,把句柄从对象里面卸下来.
harrypotter 2003-08-11
  • 打赏
  • 举报
回复
Attach的是一个句柄,那么该句柄与CWnd的m_hWnd之间又有什么关系和联系呢?
gzshd 2003-08-11
  • 打赏
  • 举报
回复
Attach是连接的意思,在很多地方都可以看到
如在Office自动化编程里,Attach可以连接一个已被打开的文档
jennifergiant 2003-08-11
  • 打赏
  • 举报
回复
up
就是这个意思
9731boy 2003-08-11
  • 打赏
  • 举报
回复
^o^
harrypotter 2003-08-10
  • 打赏
  • 举报
回复

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧