2011-03-16 75 views
4

我无法确保托管窗口被正确销毁。WPF互操作 - HwndHost不会自动销毁托管窗口

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

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

我原以为这足以确保潜在的CWnd衍生应用程序收到WM_CLOSE什么的,但这似乎并没有发生 - Spy ++只报告发送的注册消息“HwndSubclass.DetachMessage”。

我读过你不应该明确地发送你的托管窗口WM_CLOSEDestroyWindowCore,因为这应该是自动发生的。

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

回答

3

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

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

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

+0

谢谢,我最终从DestroyWindowCore()调用了'DestroyWindow()',但不想更新这篇文章,直到我找到原来的引用声明你不应该这样做。虽然懒惰。 我怀疑我误解了文档或文档不正确(它实际上只是代码示例中的一条评论) – Cechner 2011-05-11 00:59:03