2011-03-16 76 views
4

我無法確保託管窗口被正確銷燬。WPF互操作 - HwndHost不會自動銷燬託管窗口

我有一個HwndHost派生類,我在TabControl中顯示(儘管這可能是不相關的)。我試圖在選項卡關閉時銷燬託管內容(而不是當包含窗口關閉時)。

我當前的代碼爲myControlHost.Dispose(),它確保HwndHost.DestroyWindowCore被立即調用。問題是,DestroyWindowCore實際上並不銷燬託管的HWND內容!

我原以爲這足以確保潛在的CWnd衍生應用程序收到WM_CLOSE什麼的,但這似乎並沒有發生 - Spy ++只報告發送的註冊消息「HwndSubclass.DetachMessage」。

我讀過你不應該明確地發送你的託管窗口WM_CLOSEDestroyWindowCore,因爲這應該是自動發生的。

當手動刪除HwndHost衍生控件時,確保託管窗口正確銷燬的正確方法是什麼?

回答

3

根據這個MSDN文檔,他們在DestroyWindowCore調用的DestroyWindow(): http://msdn.microsoft.com/en-us/library/ms752055.aspx

的DestroyWindow()將張貼WM_CLOSE消息到消息隊列中,所以實際上你不需要或不應該直接發送/後WM_CLOSE。

在我的應用程序中,實際上我調用DestroyWindowCore回調中從C#端調用的子DLL中的DestroyWindow()。然後,一切工作正常。

+0

謝謝,我最終從DestroyWindowCore()調用了'DestroyWindow()',但不想更新這篇文章,直到我找到原來的引用聲明你不應該這樣做。雖然懶惰。 我懷疑我誤解了文檔或文檔不正確(它實際上只是代碼示例中的一條評論) – Cechner 2011-05-11 00:59:03