WPF interop - HwndHost не уничтожает автоматически размещенное окно
У меня проблемы с обеспечением правильного уничтожения размещенного окна.
у меня есть HwndHost
класс, который я показываю в TabControl (хотя это, вероятно, не имеет значения). Я пытаюсь уничтожить размещенный контент при закрытии вкладки (а не при закрытии содержащего окна.)
В настоящее время у меня есть код для эффекта myControlHost.Dispose()
, который гарантирует, что HwndHost.DestroyWindowCore
называется сразу. Проблема в том, что DestroyWindowCore фактически не уничтожает размещенный контент HWND!
Я бы подумал, что этого достаточно, чтобы обеспечить CWnd
приложение получает WM_CLOSE
или что-то, но это, кажется, не происходит - Spy++ сообщает только об отправке зарегистрированного сообщения "HwndSubclass.DetachMessage".
Я прочитал, что вы не должны явно отправлять свое размещенное окно WM_CLOSE
в DestroyWindowCore
, как это должно происходить автоматически.
Как правильно убедиться, что размещенное окно корректно уничтожается при удалении вручную HwndHost
контроль?
1 ответ
Согласно этому документу MSDN, они вызывают DestroyWindow() в DestroyWindowCore: http://msdn.microsoft.com/en-us/library/ms752055.aspx
DestroyWindow() отправит сообщение WM_CLOSE в очередь сообщений, поэтому на самом деле вам не нужно или не нужно напрямую отправлять / отправлять WM_CLOSE.
В моем приложении на самом деле я вызываю DestroyWindow() в подчиненной DLL, которая вызывается со стороны C# в обратном вызове DestroyWindowCore. Тогда все работает нормально.