我无法确保托管窗口被正确销毁。
我有一个HwndHost
- 派生类,我在TabControl中显示(虽然这可能是无关紧要的)。我正在尝试在选项卡关闭时销毁托管内容(而不是在包含窗口关闭时。)
我目前拥有myControlHost.Dispose()
效果的代码,可确保立即调用HwndHost.DestroyWindowCore
。问题是,DestroyWindowCore实际上并没有破坏托管的HWND内容!
我原以为这足以确保基础CWnd
派生的应用程序收到WM_CLOSE
或其他东西,但这似乎不会发生 - Spy ++只报告一条注册消息“HwndSubclass .DetachMessage“被发送。
我已经读过您不应该在WM_CLOSE
中明确地将托管窗口发送DestroyWindowCore
,因为这应该是自动发生的。
在手动删除HwndHost
派生控件时,确保托管窗口被正确销毁的正确方法是什么?
答案 0 :(得分:3)
根据这个MSDN文档,他们在DestroyWindowCore中调用DestroyWindow(): http://msdn.microsoft.com/en-us/library/ms752055.aspx
DestroyWindow()会将WM_CLOSE消息发布到消息队列中,所以实际上你不需要或不应该直接发送/发布WM_CLOSE。
在我的应用程序中,实际上我在一个子DLL中调用DestroyWindow(),该子DLL在DestroyWindowCore回调中从C#端调用。然后,一切正常。