MFC IE встраивает в браузер - PullRequest
5 голосов
/ 11 сентября 2008

У меня есть это немодальное диалоговое окно 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 Ответ

3 голосов
/ 18 сентября 2008

проблема 1) попробуйте myBrowser.navigate ("about: blank") перед разрушением окна.

...