mfc多文档集成cef3 详细过程
时间: 2023-08-18 13:10:12 浏览: 273
好的,下面是一个详细的步骤,展示如何在MFC多文档应用程序中集成CEF3。
1. 下载CEF3库并将它们添加到你的项目中。你可以从CEF3官方网站下载它们。解压缩后,将它们添加到你的项目中。确保你添加了以下文件:
- libcef.dll
- libEGL.dll
- libGLESv2.dll
2. 在你的MFC多文档应用程序的主框架类中添加一个成员变量,用于存储CEF3浏览器对象:
```cpp
CefRefPtr<CefBrowser> m_browser;
```
3. 在主框架类的`OnCreate`方法中创建CEF3浏览器对象:
```cpp
// Initialize CEF.
CefRefPtr<CefCommandLine> command_line = CefCommandLine::CreateCommandLine();
CefMainArgs main_args(GetModuleHandle(NULL));
CefRefPtr<CefApp> app(new CefApp());
CefInitialize(main_args, settings, app.get());
// Create the browser.
CefWindowInfo window_info;
window_info.SetAsChild(m_hWnd, m_rcClient);
CefBrowserSettings browser_settings;
browser_settings.windowless_rendering_enabled = true;
CefRefPtr<CefClient> client(new CefClientImpl());
CefBrowserHost::CreateBrowser(window_info, client, url, browser_settings, NULL);
```
在这里,我们先创建了一个`CefCommandLine`对象,并用它初始化了CEF3。然后,我们使用`CefWindowInfo`和`CefBrowserSettings`对象创建了CEF3浏览器对象,并设置了一些选项。最后,我们调用`CefBrowserHost::CreateBrowser`方法来创建浏览器。
4. 创建一个派生自`CefClient`的类,用于实现CEF3浏览器的回调函数:
```cpp
class CefClientImpl : public CefClient
{
public:
virtual CefRefPtr<CefRenderHandler> GetRenderHandler() override
{
return this;
}
virtual void OnPaint(CefRefPtr<CefBrowser> browser, PaintElementType type, const RectList& dirtyRects, const void* buffer, int width, int height) override
{
// Draw the buffer to the screen.
HDC hdc = ::GetDC(m_hWnd);
HDC memDC = CreateCompatibleDC(hdc);
HBITMAP bitmap = CreateCompatibleBitmap(hdc, width, height);
SelectObject(memDC, bitmap);
BITMAPINFO bmi = {};
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = width;
bmi.bmiHeader.biHeight = -height;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = BI_RGB;
SetDIBits(memDC, bitmap, 0, height, buffer, &bmi, DIB_RGB_COLORS);
BitBlt(hdc, 0, 0, width, height, memDC, 0, 0, SRCCOPY);
DeleteObject(bitmap);
DeleteDC(memDC);
::ReleaseDC(m_hWnd, hdc);
}
};
```
在这个类中,我们派生自`CefClient`,并实现了`CefRenderHandler`的回调函数来处理CEF3浏览器的绘制。在`OnPaint`方法中,我们将CEF3浏览器的缓冲区绘制到屏幕上。
5. 在主框架类的`OnDestroy`方法中释放CEF3:
```cpp
// Shut down CEF.
CefShutdown();
```
6. 添加CEF3头文件和库文件到你的项目中。在头文件中,你需要包含以下文件:
```cpp
#include "include/cef_base.h"
#include "include/cef_app.h"
#include "include/cef_browser.h"
#include "include/cef_client.h"
#include "include/cef_render_handler.h"
```
在库文件中,你需要添加以下文件:
```cpp
libcef.lib
libEGL.lib
libGLESv2.lib
```
7. 在你的应用程序中添加以下依赖项:
```cpp
#pragma comment(lib, "libcef.lib")
#pragma comment(lib, "libEGL.lib")
#pragma comment(lib, "libGLESv2.lib")
```
现在,你就可以在你的MFC多文档应用程序中集成CEF3了。当然,你需要根据你的具体需求进行更改和扩展。
阅读全文