MFC IE 嵌入式 Web 浏览器的古怪之处
-
09-06-2019 - |
题
我有一个嵌入 Internet Explorer Web 浏览器控件的无模式 MFC 对话框。
该控制直接源自 CWnd
使用 Visual Studio 生成的 ActiveX 包装器,并将其映射到 CDialog
仅使用一个 DDX_Control(pDX, IDC_EXPLORER, m_explorer);
.
我有两个问题。
问题#1:
由于是无模式的,我可以根据自己的喜好使用 new/Create() 启动和停止对话框,然后使用 DestroyWindow()/delete(在 PostNcDestroy 中)。
当 IE 控件开始加载 Flash 视频(常规 YouTube 内容)时,问题就开始了:当一个关闭,从而破坏对话框时,视频仍然加载!直到完全缓存为止。即使父对话框已通过 PostNcDestroy 并且所有内存均已释放,Flash ActiveX 线程仍会徘徊并继续运行。
该怎么办?如何真正“杀死”子 Web 控件及其所有线程?
问题#2:
Web 浏览器控件覆盖了对话框的整个区域。我无法拦截任何 OnMouseMove()
- 在父对话框或网络浏览器映射类中!是什么赋予了?
谢谢!
“清理”
在 PostNcDestroy() 中“删除这个” - 当然还要调用基本函数。应该更多吗?什么?对话框不应该优雅地照顾它的孩子吗?
我尝试在 Web 控件上显式调用 DestroyWindow,或者向他发送/发布诸如 WM_DESTROY、WM_CLOSE、甚至 WM_QUIT 之类的消息 - 但什么都没有 - 同样的交易。
问题#2:
不,就像缩进一样,控件占据了所有空间并且它位于顶部,所以我猜任何鼠标操作都不会被传输到“下面”:)?但为什么他自己的 OnMouseMove 没有被调用呢?因为它直接来自CWnd?我迷路了...
解决方案
问题 1)在销毁窗口之前尝试 myBrowser.navigate("about:blank") 。