質問

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") を試してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top