cef3集成mfc多文档 详细过程
时间: 2023-10-05 22:13:50 浏览: 84
在 MFC 多文档应用程序中集成 CEF3,需要进行以下步骤:
1. 创建 MFC 多文档应用程序项目:在 Visual Studio 中创建一个 MFC 应用程序项目,选择多文档应用程序模板,生成项目。
2. 添加 CEF3 支持库:在项目中添加 CEF3 支持库,包括 `libcef.lib`、`libcef_dll_wrapper.lib`、`libEGL.lib` 和 `libGLESv2.lib` 四个库文件,同时将 CEF3 相关的头文件添加到项目中。
3. 初始化 CEF3:在应用程序启动时,需要初始化 CEF3。在 MFC 应用程序中,可以在 `InitInstance()` 函数中初始化 CEF3。具体来说,需要调用 `CefMainArgs` 和 `CefSettings` 类的构造函数来设置 CEF3 的配置参数,然后调用 `CefInitialize` 函数来启动 CEF3。
```cpp
BOOL CMyApp::InitInstance()
{
// 初始化 CEF3
CefMainArgs mainArgs(::GetModuleHandle(nullptr));
CefRefPtr<CefApp> app(new CMyApp());
CefSettings settings;
CefInitialize(mainArgs, settings, app, nullptr);
// ...
return TRUE;
}
```
4. 创建 CEF3 窗口类:创建一个继承自 `CefBrowserProcessHandler` 类的窗口类,用于处理 CEF3 浏览器进程的相关事件。具体来说,需要重写 `OnBeforeCommandLineProcessing` 和 `OnContextInitialized` 函数,分别用于设置 CEF3 的命令行参数和浏览器上下文。
```cpp
class CMyBrowserProcessHandler : public CefBrowserProcessHandler
{
public:
// ...
virtual void OnBeforeCommandLineProcessing(
const CefString& process_type,
CefRefPtr<CefCommandLine> command_line) OVERRIDE
{
// 设置 CEF3 命令行参数
command_line->AppendSwitch("disable-gpu");
command_line->AppendSwitch("disable-gpu-compositing");
command_line->AppendSwitch("disable-software-rasterizer");
}
virtual void OnContextInitialized() OVERRIDE
{
// 创建浏览器上下文
CefRefPtr<CefRequestContext> context = CefRequestContext::CreateContext(
CefRequestContextSettings(),
nullptr
);
}
// ...
};
```
5. 创建 CEF3 浏览器窗口:在 MFC 应用程序中,可以使用 `CWnd` 类中的 `CreateEx` 函数来创建 CEF3 浏览器窗口。具体来说,需要创建一个继承自 `CefClient` 类的客户端类,用于处理 CEF3 浏览器窗口的相关事件,然后在客户端类中重写相应的回调函数。
```cpp
class CMyClient : public CefClient,
public CefLifeSpanHandler,
public CefLoadHandler,
public CefRenderHandler
{
public:
// ...
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() OVERRIDE
{
return this;
}
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() OVERRIDE
{
return this;
}
virtual CefRefPtr<CefRenderHandler> GetRenderHandler() OVERRIDE
{
return this;
}
// ...
};
void CMyView::OnInitialUpdate()
{
// 创建 CEF3 浏览器窗口
CRect rect;
GetClientRect(rect);
m_browser = new CefBrowserWrapper();
m_browser->CreateBrowser(this, rect, "about:blank", nullptr, nullptr);
}
```
6. 处理 CEF3 消息循环:在 MFC 应用程序中,需要在主线程中处理 CEF3 消息循环。具体来说,可以使用 `CefDoMessageLoopWork` 函数来处理 CEF3 的消息循环。
```cpp
void CMyApp::Run()
{
// 处理 CEF3 消息循环
while (true) {
MSG msg;
if (::PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT) {
break;
}
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
else {
CefDoMessageLoopWork();
}
}
}
```
7. 关闭 CEF3:在关闭 MFC 应用程序时,需要关闭 CEF3。具体来说,可以在 `ExitInstance()` 函数中调用 `CefShutdown` 函数来关闭 CEF3。
```cpp
void CMyApp::ExitInstance()
{
// 关闭 CEF3
CefShutdown();
// ...
CWinAppEx::ExitInstance();
}
```
以上就是在 MFC 多文档应用程序中集成 CEF3 的详细过程。需要注意的是,CEF3 是一个独立的进程,与 MFC 应用程序是分开的,因此需要特别注意 CEF3 进程的生命周期和消息循环。
阅读全文
相关推荐
















