Internet Explorer Web ブラウザー コントロールを埋め込むこのモードレス MFC ダイアログがあります。
CWnd
コントロールは、Visual Studio によって生成された ActiveX ラッパーから直接派生しCDialog
、DDX_Control(pDX, IDC_EXPLORER, m_explorer);
.
2つの問題があります。
問題#1:
モードレスであるため、new/Create() を使用して、次に DestroyWindow()/delete (PostNcDestroy 内) を使用して、自分の好みでダイアログを開始および停止します。
問題は、IE コントロールが Flash ビデオ (通常の YouTube のもの) の読み込みを開始したときに始まります。IE コントロールを閉じてダイアログを破壊すると、ビデオはまだ読み込まれます! 完全にキャッシュされるまで。親ダイアログが PostNcDestroy を通過し、すべてのメモリが解放された場合でも、Flash ActiveX スレッドは残り、実行を続けます。
何をすべきか?その子 Web コントロールとそのすべてのスレッドを本当に「殺す」にはどうすればよいですか?
問題#2:
Web ブラウザー コントロールは、ダイアログの全領域をカバーします。OnMouseMove()
親ダイアログまたは Web ブラウザー マッピング クラスでインターセプトできません。何を与える?
ありがとう!
"掃除"
PostNcDestroy() で「これを削除」 - もちろん基本関数を呼び出します。もっとあるべきですか?何?ダイアログはその子を適切に処理するべきではないでしょうか?
Web コントロールで DestroyWindow を明示的に呼び出すか、WM_DESTROY、WM_CLOSE、さらには WM_QUIT などのメッセージを送信/投稿しようとしましたが、何もしませんでした。
問題#2:
いいえ、インデントのように、コントロールはすべてのスペースを取り、それが一番上にあるので、マウスアクションは「下」に送信されないと思います:)?しかし、なぜ彼自身の OnMouseMove が呼び出されないのでしょうか? CWndから直行するから?道に迷いました...