c++ - WIN32 - 同步创建 WebView2 不起作用 - 我的集成 Web 浏览器没有白色矩形
问题描述
简而言之,我向您解释我的问题。在我的应用程序中,我有一个加载浏览器的按钮。当我单击该按钮时,它会打开并很好地创建 webBrowser(白色矩形)。
但是,当我通过事件 WM_SHOWWINDOW 打开应用程序的窗口(包含不同的组件:按钮、edittext 等)时尝试创建 Web 浏览器时,如果我发表评论,我看不到我的 Web 浏览器除外构造函数 EdgeBrowser 中的所有循环“while”。
为什么 ?你能给我一个解决方案吗?这将是友好的。
我创建了一个带有构造函数的类 EdgeBrowser,该构造函数接收我的 WIN32 组件(HWND 组件)的句柄。在我的构造函数中,我做了类似的事情:
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);
}
}
}
在我的“CreateWebView”函数的一部分中,不同的侦听器:
void EdgeBrowser::CreateWebView
{
// other code
HRESULT hr = CreateCoreWebView2EnvironmentWithOptions(nullptr, userDataDir.c_str(),nullptr,Microsoft::WRL::Callback<ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler>(this,&EdgeBrowser::OnCreateCoreWebView2EnvironmentCompletedHandler).Get());
}
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());
}
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;
}
解决方案
WebView2 控件需要在创建它的 UI 线程上运行消息循环(有关WebView2 线程的更多信息,请参阅此页面)。您可以将WebView2APISample 示例应用程序视为基于示例 C++ Win32 HWND 的应用程序。
推荐阅读
- build - node-gyp 忽略 (c++17) cflag
- java - ibatis 2.3.x 可以懒加载java.lang.Integer吗?
- wpf - 如何使用以下方案设计 Treeview
- angular - 访问 Angular SafeValue 的内部值
- ios - 推送通知后转换到特定视图控制器。不同的故事板和不同的选项卡
- scala - 将常量传递给超级构造函数
- javascript - 仅在隐藏的 div (display:none) 处于活动状态时运行脚本
- javascript - 如何使 Web Worker 异步?
- asp.net-core-mvc - ASP.NET Core 自定义用户角色实现
- javascript - CSS z-index 不适用于父元素具有变换的元素:translate3d