4

我无法确保正确销毁托管窗口。

我有一个HwndHost在 TabControl 中显示的派生类(尽管这可能无关紧要)。我试图在选项卡关闭时销毁托管内容(而不是在包含窗口关闭时。)

我目前有 的代码myControlHost.Dispose(),它确保HwndHost.DestroyWindowCore立即调用它。问题是,DestroyWindowCore 实际上并没有销毁托管的 HWND 内容!

我原以为这足以确保底层CWnd派生的应用程序接收到 aWM_CLOSE或其他内容,但这似乎没有发生 - Spy++ 仅报告正在发送的注册消息“HwndSubclass.DetachMessage”。

我已经读到您不应该在 中明确发送您的托管窗口 a WM_CLOSEDestroyWindowCore因为这应该自动发生。

HwndHost手动删除衍生控件时,确保正确销毁托管窗口的正确方法是什么?

4

1 回答 1

3

根据这个 MSDN 文档,他们在 DestroyWindowCore 中调用 DestroyWindow():http: //msdn.microsoft.com/en-us/library/ms752055.aspx

DestroyWindow() 会将 WM_CLOSE 消息发布到消息队列中,因此实际上您不需要或不应该直接发送/发布 WM_CLOSE。

在我的应用程序中,实际上我在一个子 DLL 中调用 DestroyWindow(),该子 DLL 在 DestroyWindowCore 回调中从 C# 端调用。然后,一切正常。

于 2011-05-10T21:44:54.863 回答