为什么多个CWnd不能连接相同的HWND

时间:2016-10-19 08:22:44

标签: winapi mfc

我正在尝试在另一个进程中操作远程窗口。我创建了一个CWnd的包装类,我正在尝试构造构造函数&复制构造函数。所以我的应用程序可能有多个包装类附加相同的HWND实例。

错误说:

  

Debug Assertion失败!

以下是示例代码:

CWnd wnd1, wnd2;
wnd1.Attach((HWND)1);
wnd2.Attach((HWND)1); // Error happens in this line

1 个答案:

答案 0 :(得分:5)

MFC(部分)是围绕Windows API的资源管理包装器。它在HWNDCWnd之间保持严格的所有权关系。原生HWND只能拥有最多一个CWnd对象 1

这解释了你得到的错误。

现在解决方案:既然你拥有外国HWND,那么将它附加到CWnd已经是错误的做法了。由于CWnd只提供资源管理(您不需要资源管理),它不会为您买任何东西。

解决方案:删除MFC。将HWND与Windows API一起使用。

<小时/> 1 MFC通过保留当前附加到HWND个对象的所有CWnd的列表来检查此不变量。 CWnd::FromHandlePermanent是对该列表的查找。如果它返回非NULL值,则会触发断言。