Вопрос

У меня есть немодальное диалоговое окно 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"), прежде чем уничтожать окно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top