WIN32 - Impossible de charger un web browser intégré au lancement de ma fenêtre
Bonjour à vous,
Je travaille avec une application WIN32. Je sais que le message WM_INITDIALOG se déclenche lors de l'initialisation d'une fenêtre ou boite de dialogue. Mais quel est le message envoyé lorsque la fenêtre ou boite de dialogue est complètement chargée ?
Pourquoi je vous pose la question ? Car dans ma fenêtre personnelle WIN32, j'utilise un composant de type CONTROL qui possède le component ID = PUBLICATION_TEXT.
Avec ce PUBLICATION_TEXT, j'essaie de créer à l'intérieur de lui un web browser intégré mais ça ne marche pas.
Code:
1 2 3 4
|
HWND publication_text_hwnd = GetDlgItem(hDlg, PUBLICATION_TEXT);
Browser* browser2 = BrowserFactory::GetBrowser(publication_text_hwnd, hInst, BrowserName::EDGE);
browser2->GoTo("http://www.bing.com"); |
PAR CONTRE, quand je tente d'ajouter ce même code ci-dessus lorsque je clique sur un des composants de ma fenêtre, là, ça marche. Pourquoi ???
J'aimerais bien pouvoir afficher une page web une fois que ma fenêtre soit complètement chargé.
WIN32 - Impossible de charger un web browser intégré au lancement de ma fenêtre
Bonjour à vous,
En bref, je vous explique mon problème.
J'ai crée une classe EdgeBrowser avec un constructeur qui reçoit un handle(HWND) de mon composant WIN32 qui servira à la construction de mon web browser intégré.
Dans mon constructeur, je fais ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| EdgeBrowser::EdgeBrowser(HWND hwnd)
{
_hwnd = hwnd;
EdgeBrowser::_beginAsyncOperation = true;
this->CreateWebView();
while (EdgeBrowser::_beginAsyncOperation)
{
Sleep(10);
MSG msg;
for (int nmsg = 0; nmsg < 50; ++nmsg)
{
int rc = PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
if (rc == 0)
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
} |
Et voici une partie de la fonction CreateWebView qui est appelé dans le constructeur EdgeBrowser ainsi que différents listeners :
Code:
1 2 3 4 5
| void EdgeBrowser::CreateWebView
{
// other code
HRESULT hr = CreateCoreWebView2EnvironmentWithOptions(nullptr, userDataDir.c_str(),nullptr,Microsoft::WRL::Callback<ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler>(this,&EdgeBrowser::OnCreateCoreWebView2EnvironmentCompletedHandler).Get());
} |
Code:
1 2 3 4 5 6
| HRESULT EdgeBrowser::OnEnvironmentReadyCompletedHandler(HRESULT result, ICoreWebView2Environment* env)
{
HRESULT createBrowserControlsResult = m_uiEnv->CreateCoreWebView2Controller(this->_thisHandler, Microsoft::WRL::Callback<ICoreWebView2CreateCoreWebView2ControllerCompletedHandler>(this,&EdgeBrowser::OnCreateCoreWebView2ControllerCompletedHandler).Get());
HRESULT createBrowserOptionsResult = m_uiEnv->CreateCoreWebView2Controller(this->_thisHandler,Microsoft::WRL::Callback<ICoreWebView2CreateCoreWebView2ControllerCompletedHandler>( this,&EdgeBrowser::OnCreateCoreWebView2ControllerOptionsCompletedHandler).Get());
} |
Code:
1 2 3 4 5 6 7 8 9
| HRESULT EdgeBrowser::OnCreateCoreWebView2ControllerOptionsCompletedHandler(HRESULT result, ICoreWebView2Controller* host)
{
m_optionsController = host;
HRESULT getOptWebViewResult = m_optionsController->get_CoreWebView2(&m_optionsWebView);
//other code
EdgeBrowser::_beginAsyncOperation = false;
return S_OK;
} |
Dans mon application, quand je clique dans mon composant rectangulaire qui censé être mon browser, il charge bien le browser, aucun problème. J'obtiens bien un rectangle blanc.
MAIS quand j'essaie de créer, d'initialiser le web browser lors de l'ouverture d'un des écrans (via le message WM_SHOWWINDOW de mon application), je ne vois pas le web browser SAUF si je met en commentaire tout le "while" du constructeur EdgeBrowser.
J'ai déjà posé la question sur d'autres forums mais personne ne me répond ou ne sait me répondre. Pourquoi ça ne marche pas ?