WPF interop - HwndHost не уничтожает автоматически размещенное окно - PullRequest
4 голосов
/ 16 марта 2011

У меня проблемы с обеспечением правильного уничтожения размещенного окна.

У меня есть класс HwndHost, который я отображаю в TabControl (хотя это, вероятно, не имеет значения).Я пытаюсь уничтожить размещенный контент при закрытии вкладки (а не при закрытии содержащего окна).

В настоящее время у меня есть код с эффектом myControlHost.Dispose(), который гарантирует немедленный вызов HwndHost.DestroyWindowCore.Проблема в том, что DestroyWindowCore на самом деле не уничтожает размещенный контент HWND!

Я бы подумал, что этого достаточно, чтобы гарантировать, что базовое CWnd -приведенное приложение получает WM_CLOSE или что-то еще, но это делаетпохоже, этого не происходит - Spy ++ сообщает только об отправке зарегистрированного сообщения "HwndSubclass.DetachMessage".

Я прочитал, что вы не должны явно отправлять ваше размещенное окно WM_CLOSE в DestroyWindowCore, поскольку это должно происходить автоматически.

Как правильно убедиться, что размещенное окно корректно уничтожается при ручном удалении элемента управления HwndHost?

1 Ответ

3 голосов
/ 11 мая 2011

Согласно этому документу MSDN, они вызывают DestroyWindow () в DestroyWindowCore: http://msdn.microsoft.com/en-us/library/ms752055.aspx

DestroyWindow () отправит сообщение WM_CLOSE в очередь сообщений, поэтому на самом деле вам не нужно или не нужно напрямую отправлять / отправлять WM_CLOSE.

В моем приложении на самом деле я вызываю DestroyWindow () в подчиненной DLL, которая вызывается со стороны C # в обратном вызове DestroyWindowCore. Затем все работает нормально.

...