C++ 从HWnd获取永久CWnd

C++ 从HWnd获取永久CWnd,c++,mfc,C++,Mfc,我们遇到了临时句柄的问题 正如我在这里读到的: CWnd::FromHandle()将创建一个临时句柄。我们的计划是储存手柄以备日后使用,但这行不通 我们还尝试了CWnd::fromHandlePermant(),但这会以某种方式返回空指针 以及mpWnd->Attach(mhWnd)引发了访问冲突异常 如果可能,我们希望存储CWnd而不是HWnd,并在每次需要CWnd时调用FromHandle()。 有人知道这个问题的解决方案吗?如果子类现有窗口,或者使用CWnd::create函数之一创建C

我们遇到了临时句柄的问题

正如我在这里读到的:
CWnd::FromHandle()
将创建一个临时句柄。我们的计划是储存手柄以备日后使用,但这行不通

我们还尝试了
CWnd::fromHandlePermant()
,但这会以某种方式返回空指针

以及
mpWnd->Attach(mhWnd)引发了访问冲突异常

如果可能,我们希望存储
CWnd
而不是
HWnd
,并在每次需要
CWnd
时调用
FromHandle()。

有人知道这个问题的解决方案吗?

如果子类现有窗口,或者使用
CWnd::create
函数之一创建
CWnd
,则只会得到一个永久的
CWnd
对象

在这种情况下,您应该不要使用
Attach
<代码>附加
子类窗口
和内部
创建
钩子使用。如果使用
Attach
而不进行子类化,则销毁后该窗口将不会从句柄映射中删除

因此,当
Attach
函数出现错误时,可能是mpwnd对象无效,或者
CWnd
对象已被子类化

另外,我也不明白为什么要存储
CWnd
指针。使用句柄,必要时使用
FromHandle
。子类化窗口的缺点总是:如果您的程序后来试图子类化窗口,那么最终会失败,因为它已经子类化了


另外,您的问题没有给出信息为什么要这样做。

CWnd与句柄不同,它只是一个窗口对象指针;“真正”的句柄是hWnd,只要窗口打开,您就已经知道解决方案。你为什么不用它?