Странность встроенного веб-браузера MFC IE
-
09-06-2019 - |
Вопрос
У меня есть немодальное диалоговое окно MFC, в которое встроен элемент управления веб-браузера Internet Explorer.
Управление происходит непосредственно от CWnd
с оболочками ActiveX, созданными Visual Studio, и сопоставляю их с CDialog
используя только DDX_Control(pDX, IDC_EXPLORER, m_explorer);
.
У меня есть 2 проблемы.
Проблема №1:
Будучи немодальным, я запускаю и останавливаю диалог по своему усмотрению, используя new/Create(), затем DestroyWindow()/delete(в PostNcDestroy).
Проблемы начинаются, когда элемент управления IE начинает загружать Flash-видео (обычное видео с YouTube):когда он закрывается, тем самым уничтожая диалог, видео все равно загружается!Прямо до полного кэширования.Поток Flash ActiveX все еще задерживается и продолжает выполняться, даже если родительский диалог прошел PostNcDestroy и вся память была освобождена.
Что делать?Как на самом деле «убить» этот дочерний веб-элемент управления и все его потоки?
Проблема №2:
Элемент управления веб-браузера охватывает всю область диалогового окна.Я не могу перехватить ничего OnMouseMove()
- в родительском диалоге или в классе отображения веб-браузера!Что дает?
Спасибо!
«Уборка»
«удалить это» в PostNcDestroy() — и, конечно же, вызвать базовую функцию.Должно ли быть больше?Что?Разве диалог не должен изящно заботиться о своих дочерних элементах?
Я пытался явно вызвать DestroyWindow в веб-элементе управления или отправить/отправить ему сообщения типа WM_DESTROY, WM_CLOSE, даже WM_QUIT - но ничего - то же самое.
Проблема №2:
Нет, как и в случае с отступом, элемент управления занимает все пространство и находится сверху, поэтому я думаю, что любое действие мыши не передается «ниже» :)?Но тогда почему его собственный OnMouseMove не вызывается?Потому что он идет прямо из CWnd?Я заблудился...
Решение
проблема 1) попробуйте myBrowser.navigate("about:blank"), прежде чем уничтожать окно.