【发布时间】:2010-09-08 12:59:07
【问题描述】:
我有这个嵌入 Internet Explorer Web 浏览器控件的无模式 MFC 对话框。
控件直接从 CWnd 派生而来,带有由 Visual Studio 生成的 ActiveX 包装器,我仅使用 DDX_Control(pDX, IDC_EXPLORER, m_explorer); 将其映射到 CDialog。
我有 2 个问题。
问题 #1:
由于是无模式的,我自己使用 new/Create() 开始和停止对话框,然后使用 DestroyWindow()/delete(在 PostNcDestroy 中)。
当 IE 控件开始加载 Flash 视频(常规的 YouTube 内容)时,问题就开始了:当一个关闭,从而破坏对话框时,视频仍然加载!直到完全缓存。即使父对话框已通过 PostNcDestroy 并且所有内存都已释放,Flash ActiveX 线程仍会徘徊并继续运行。
怎么办?您如何真正“杀死”该子 Web 控件及其所有线程?
问题 #2:
Web 浏览器控件覆盖对话框的整个区域。我无法拦截任何OnMouseMove() - 在父对话框或 Web 浏览器映射类中!什么给了?
谢谢!
“清理”
PostNcDestroy() 中的“delete this” - 当然是调用基本函数。应该更多吗?什么?对话不应该优雅地照顾它的孩子吗?
我尝试在 Web 控件上显式调用 DestroyWindow,或者向他发送/发布消息,例如 WM_DESTROY、WM_CLOSE 甚至 WM_QUIT - 但没有 - 相同的交易。
问题 #2:
不,就像缩进一样,控件占用了所有空间并且它在顶部,所以我猜任何鼠标操作都不会被传递到“波纹管”:)?但是为什么不调用他自己的 OnMouseMove 呢?因为它直接来自CWnd?我迷路了……
【问题讨论】:
-
对于问题#1,销毁对话框时的清理顺序是什么?问题#2,您的意思是说,控件占用的空间比您创建时指定的空间多吗?
标签: c++ internet-explorer mfc dialog