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. Тогда все работает нормально.

Другие вопросы по тегам