cef3集成mfc多文档视图 详细教程
时间: 2023-07-29 22:06:22 浏览: 60
CEF3是一个开源的Chromium项目,可以方便地在自己的应用程序中嵌入现代Web技术。而MFC是微软基于Windows的GUI编程框架,用于开发Windows应用程序。在本教程中,我们将介绍如何将CEF3集成到MFC多文档视图应用程序中。
1. 创建一个MFC多文档应用程序项目
首先,我们需要创建一个MFC多文档应用程序项目。在Visual Studio中,选择“文件”>“新建”>“项目”,然后选择“MFC应用程序向导”。在向导中,选择“多文档”应用程序类型,并选择所需的选项。
2. 下载CEF3库文件
从CEF官网上下载最新的CEF3库文件,解压缩到本地文件夹中。
3. 将CEF3库文件添加到项目中
将CEF3库文件中的“Release”文件夹中的所有文件复制到MFC应用程序的“Debug”文件夹中。将CEF3库文件中的“Resources”文件夹中的所有文件复制到MFC应用程序的“Debug”文件夹中的“Resources”子文件夹中。
4. 添加CEF3头文件和链接库
在Visual Studio中,打开项目属性。在“VC++目录”中,添加CEF3库文件的头文件路径。在“链接器”中,添加CEF3库文件的链接库路径。在“输入”中,添加CEF3库文件的链接库名称。
5. 集成CEF3到MFC多文档视图应用程序
在MFC应用程序中,打开“MainFrm.cpp”文件。添加以下代码段到“CMainFrame”类的声明中:
```
#include "cefclient.h"
#include "client_handler.h"
class CefView : public CWnd
{
public:
CefView() {}
virtual ~CefView() {}
protected:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnDestroy();
afx_msg void OnSize(UINT nType, int cx, int cy);
DECLARE_MESSAGE_MAP()
CefRefPtr<ClientHandler> m_ClientHandler;
IMPLEMENT_REFCOUNTING(CefView);
};
```
在“MainFrm.cpp”文件中,添加以下代码段到“CMainFrame”类的实现中:
```
BEGIN_MESSAGE_MAP(CefView, CWnd)
ON_WM_CREATE()
ON_WM_DESTROY()
ON_WM_SIZE()
END_MESSAGE_MAP()
BOOL CefView::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CWnd::PreCreateWindow(cs))
return FALSE;
cs.dwExStyle |= WS_EX_CLIENTEDGE;
cs.style &= ~WS_BORDER;
return TRUE;
}
int CefView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
CefSettings settings;
CefInitialize(settings);
CefWindowInfo window_info;
CefRefPtr<ClientHandler> client_handler(new ClientHandler);
m_ClientHandler = client_handler;
RECT rect;
GetClientRect(&rect);
window_info.SetAsChild(m_hWnd, rect);
CefBrowserSettings browser_settings;
std::string url = "https://www.baidu.com";
CefBrowserHost::CreateBrowserSync(window_info, client_handler.get(), url, browser_settings, NULL);
return 0;
}
void CefView::OnDestroy()
{
CefShutdown();
CWnd::OnDestroy();
}
void CefView::OnSize(UINT nType, int cx, int cy)
{
CWnd::OnSize(nType, cx, cy);
if (m_ClientHandler.get() != NULL && m_ClientHandler->GetBrowser().get() != NULL)
{
CefRect rect;
rect.x = 0;
rect.y = 0;
rect.width = cx;
rect.height = cy;
m_ClientHandler->GetBrowser()->GetHost()->WasResized();
}
}
```
在“MainFrm.cpp”文件中,添加以下代码段到“CMainFrame”类的构造函数中:
```
CRect rect;
GetClientRect(&rect);
CefView* pView = new CefView;
pView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE, rect, this, 0);
```
现在,我们已经将CEF3集成到MFC多文档视图应用程序中了。运行应用程序,您将看到嵌入的CEF3浏览器窗口显示了百度页面。