WPF互操作--HwndHost不会自动销毁托管窗口

时间:2011-03-16 08:22:54

标签: wpf interop hwndhost

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

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

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

我原以为这足以确保基础CWnd派生的应用程序收到WM_CLOSE或其他东西,但这似乎不会发生 - Spy ++只报告一条注册消息“HwndSubclass .DetachMessage“被发送。

我已经读过您不应该在WM_CLOSE中明确地将托管窗口发送DestroyWindowCore,因为这应该是自动发生的。

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

1 个答案:

答案 0 :(得分:3)

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

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

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