4

ホストされているウィンドウが正しく破棄されていることを確認するのに問題があります。

HwndHostTabControlに表示している派生クラスがあります(おそらくそれは無関係ですが)。タブが閉じたときに(含まれているウィンドウが閉じたときではなく)、ホストされているコンテンツを破棄しようとしています。

私は現在、の効果のコードを持っています。myControlHost.Dispose()これにより、HwndHost.DestroyWindowCoreすぐに呼び出されます。問題は、DestroyWindowCoreがホストされているHWNDコンテンツを実際に破棄しないことです。

CWnd基盤となる派生アプリケーションが何かを確実に受信するにはこれで十分だと思いましたがWM_CLOSE、これは発生しないようです。Spy++は、送信された登録済みメッセージ「HwndSubclass.DetachMessage」のみを報告します。

WM_CLOSEこれは自動的に行われることになっているため、ホストされているウィンドウを明示的に送信することは想定されていないことを読みましたDestroyWindowCore

HwndHost派生コントロールを手動で削除するときに、ホストされているウィンドウが正しく破棄されるようにする正しい方法は何ですか?

4

1 に答える 1

3

このMSDNドキュメントによると、彼らはDestroyWindowCoreでDestroyWindow()を呼び出しています:http: //msdn.microsoft.com/en-us/library/ms752055.aspx

DestroyWindow()はWM_CLOSEメッセージをメッセージキューに投稿するので、実際にはWM_CLOSEを直接送信/投稿する必要はないか、投稿すべきではありません。

私のアプリケーションでは、実際には、DestroyWindowCoreコールバックのC#側から呼び出されるサブDLLでDestroyWindow()を呼び出しています。その後、すべてが正常に機能しています。

于 2011-05-10T21:44:54.863 に答える