Pergunta

Eu tenho essa caixa de diálogo MFC sem janela restrita que incorpora um controle do navegador Internet Explorer.

O controle é derivado diretamente de CWnd com wrappers ActiveX gerados pelo Visual Studio e mapeio-o para o CDialog usando apenas um DDX_Control(pDX, IDC_EXPLORER, m_explorer);.

Eu tenho 2 problemas.

Problema nº 1:

Sendo sem janela restrita, inicio e paro a caixa de diálogo conforme minha vontade usando new/Create() e, em seguida, DestroyWindow()/delete(em PostNcDestroy).

O problema começa quando o controle do IE começa a carregar um vídeo em Flash (coisas normais do YouTube):quando alguém fecha, destruindo assim o diálogo, o vídeo ainda carrega!Direito até totalmente armazenado em cache.O thread Flash ActiveX ainda persiste e continua em execução mesmo quando a caixa de diálogo pai passou por PostNcDestroy e toda a memória foi liberada.

O que fazer?Como você realmente 'mata' aquele controle filho da web e todos os seus threads?

Problema nº 2:

O controle do navegador web cobre toda a área da caixa de diálogo.Não posso interceptar nenhum OnMouseMove() - na caixa de diálogo pai ou na classe de mapeamento do navegador da web!O que da?

Obrigado!


"Limpar"

"delete this" em PostNcDestroy() - e chamando a função base, é claro.Deveria ser mais?O que?O diálogo não deveria cuidar graciosamente de seus filhos?

Tentei chamar explicitamente o DestroyWindow no controle da web ou enviar/postar mensagens para ele como WM_DESTROY, WM_CLOSE e até WM_QUIT - mas nada - o mesmo negócio.

Problema nº 2:

Não, como recuado, o controle ocupa todo o espaço e fica no topo, então acho que qualquer ação do mouse não é transmitida 'abaixo' :)?Mas então por que seu próprio OnMouseMove não é chamado?Porque vai direto do CWnd?Estou perdido...

Foi útil?

Solução

problema 1) tente myBrowser.navigate("about:blank") antes de destruir a janela.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top