当将一个QCefView嵌入到客户端中时,关闭cef页面其主窗口也会关闭,为了解决这个问题,需要修改QCefViewBrowserHandler中的CloseAllBrowsers函数
void QCefViewBrowserHandler::CloseAllBrowsers(bool force_close)
{
if (!CefCurrentlyOn(TID_UI))
{
// Execute on the UI thread.
CefPostTask(TID_UI,
CefCreateClosureTask(base::Bind(&QCefViewBrowserHandler::CloseAllBrowsers, this, force_close)));
return;
}
CloseAllPopupBrowsers(force_close);
//if (main_browser_.get())
// // Request that the main browser close.
// main_browser_->GetHost()->CloseBrowser(force_close);
// 更改窗口的父窗口,否则会退出浏览器进程,导致主窗口退出
if (main_browser_.get())
{
HWND hWindowHandle = main_browser_->GetHost()->GetWindowHandle();
DWORD dwStyle = GetWindowLong(hWindowHandle, GWL_STYLE);
if (dwStyle & WS_CHILD)
{
::SetParent(hWindowHandle, GetDesktopWindow());
}
main_browser_->StopLoad();
main_browser_->GetHost()->CloseBrowser(false);
}
}