我有一个嵌入 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") 。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top