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

4

我在确保托管窗口被正确销毁方面遇到了一些问题。

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

我目前的代码大致为myControlHost.Dispose(),这可以确保立即调用HwndHost.DestroyWindowCore。问题在于,DestroyWindowCore实际上并没有销毁托管的HWND内容!

我原以为这足以确保基础的CWnd派生应用程序接收到WM_CLOSE或其他类似的消息,但似乎并没有发生这种情况——Spy ++仅报告发送了一个名为“HwndSubclass.DetachMessage”的已注册消息。

我读到说,在DestroyWindowCore中,你不应该显式地向托管窗口发送WM_CLOSE,因为这应该会自动发生。

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

1个回答

3
根据这篇MSDN文档,他们在DestroyWindowCore中调用了DestroyWindow()函数: http://msdn.microsoft.com/en-us/library/ms752055.aspx DestroyWindow()会将WM_CLOSE消息发送到消息队列中,因此实际上您不需要或者不应该直接发送/发布WM_CLOSE消息。
在我的应用程序中,我实际上是在从C#侧调用的子DLL中,在DestroyWindowCore回调中调用DestroyWindow()。然后,一切都正常工作。

谢谢,最终我还是从DestroyWindowCore()中调用了DestroyWindow(),但在找到原始参考文献之前不想更新这篇文章,因为我懒得去找。我怀疑我可能误解了文档,或者文档本身有误(实际上只是代码示例中的注释)。 - Cechner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接