cef3集成mfc多文档 详细过程 crash进程没有退出
时间: 2023-10-05 19:14:43 浏览: 188
集成MFC多文档与CEF3的过程大致如下:
1. 创建一个MFC多文档应用程序,包括一个文档类、一个视图类和一个框架窗口类。
2. 下载并集成CEF3库,包括cefclient和libcef.dll等文件。
3. 在框架窗口类中添加一个成员变量`CefRefPtr<CefBrowser> m_browser;`,用于保存CEF浏览器的实例。
4. 在框架窗口类的`OnCreate`函数中创建CEF浏览器实例:
```cpp
CefWindowInfo window_info;
CefBrowserSettings browser_settings;
CefRefPtr<CefClient> client(new CefClientImpl(this)); // CefClientImpl是自定义的实现了CefClient的类
CefBrowserHost::CreateBrowserSync(window_info, client, m_url, browser_settings, NULL);
```
5. 在框架窗口类的`OnSize`函数中调用`m_browser->GetHost()->WasResized()`,以使CEF浏览器跟随窗口大小变化。
6. 在框架窗口类的析构函数中调用`m_browser->GetHost()->CloseBrowser(false);`和`m_browser = NULL;`以关闭CEF浏览器并清理资源。
7. 在框架窗口类的`OnDestroy`函数中调用`CefShutdown()`以释放CEF相关资源。
如果出现crash进程没有退出的情况,可能是由于CEF浏览器的子进程没有正确退出导致的。可以尝试在框架窗口类的析构函数中添加以下代码:
```cpp
CefRefPtr<CefBrowserHost> host = m_browser->GetHost();
if (host)
{
host->CloseBrowser(false);
host->WasResized();
host->NotifyMoveOrResizeStarted();
}
m_browser = NULL;
```
这样可以保证CEF浏览器的子进程正确退出。同时,也可以在程序退出时调用`CefShutdown()`以确保CEF相关资源被正确释放。
阅读全文