MFC IE 組み込み Web ブラウザーの奇抜さ
-
09-06-2019 - |
質問
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 のもの) の読み込みを開始すると、問題が始まります。ダイアログを閉じてダイアログを破棄しても、ビデオは引き続き読み込まれます。完全にキャッシュされるまでそのままです。Flash ActiveX スレッドは、親ダイアログが PostNcDestroy を通過し、すべてのメモリが解放された場合でも、依然として残り、実行を続けます。
何をするか?その子 Web コントロールとそのすべてのスレッドを本当に「強制終了」するにはどうすればよいでしょうか?
問題 #2:
Web ブラウザ コントロールはダイアログの領域全体をカバーします。何も傍受できない OnMouseMove()
- 親ダイアログまたは Web ブラウザのマッピング クラス内で!何が与えますか?
ありがとう!
"掃除"
PostNcDestroy() で「これを削除」 - もちろん基本関数を呼び出します。それ以上あるべきでしょうか?何?ダイアログはその子の処理を適切に行うべきではないでしょうか?
Web コントロールで DestroyWindow を明示的に呼び出すか、WM_DESTROY、WM_CLOSE、さらには WM_QUIT などのメッセージを送信/投稿しようとしましたが、何も起こりませんでした。
問題 #2:
いいえ、インデントと同様に、コントロールはすべてのスペースを占め、上部にあるので、マウス操作は「下」に送信されないのではないでしょうか:)?しかし、それではなぜ彼自身の OnMouseMove が呼び出されないのでしょうか?CWndから直通だから?道に迷いました...
解決
問題 1) ウィンドウを破棄する前に myBrowser.navigate("about:blank") を試してください。