Stravaganza del browser Web incorporato in MFC IE
-
09-06-2019 - |
Domanda
Ho questa finestra di dialogo MFC non modale che incorpora un controllo del browser Web Internet Explorer.
Il controllo deriva direttamente da CWnd
con i wrapper ActiveX generati da Visual Studio e lo mappo al file CDialog
utilizzando solo a DDX_Control(pDX, IDC_EXPLORER, m_explorer);
.
Ho 2 problemi.
Problema n. 1:
Essendo non modale, avvio e interrompo la finestra di dialogo a mio piacimento utilizzando new/Create(), quindi DestroyWindow()/delete(in PostNcDestroy).
I problemi iniziano quando il controllo IE inizia a caricare un video Flash (roba normale di YouTube):quando si chiude, distruggendo così la finestra di dialogo, il video si carica comunque!Fino a quando non sarà completamente memorizzato nella cache.Il thread Flash ActiveX persiste e continua a essere eseguito anche quando la finestra di dialogo principale ha superato PostNcDestroy e tutta la memoria è stata liberata.
Cosa fare?Come puoi veramente "uccidere" quel controllo web figlio e tutti i suoi thread?
Problema n. 2:
Il controllo del browser Web copre l'intera area della finestra di dialogo.Non posso intercettarne nessuno OnMouseMove()
- nella finestra di dialogo principale o nella classe di mappatura del browser web!Cosa dà?
Grazie!
"Ripulire"
"elimina questo" in PostNcDestroy() - e ovviamente chiamando la funzione base.Dovrebbe essere di più?Che cosa?Il dialogo non dovrebbe prendersi cura con grazia dei suoi figli?
Ho provato a chiamare esplicitamente DestroyWindow sul controllo web o a inviargli/pubblicare messaggi come WM_DESTROY, WM_CLOSE e persino WM_QUIT, ma niente, stesso affare.
Problema n. 2:
No, come nel caso del rientro, il controllo occupa tutto lo spazio ed è in alto, quindi immagino che qualsiasi azione del mouse non venga trasmessa "sotto" :)?Ma allora perché il suo OnMouseMove non viene chiamato?Perché va direttamente da CWnd?Mi sono perso...
Soluzione
problema 1) prova myBrowser.navigate("about:blank") prima di distruggere la finestra.