简介:这是一个在VS2010平台开发内嵌浏览器内核MFC客户端。运行就来占用内存和一般浏览器差别不大。 目前CEF最新的版本已经更新到CEF3,本项目所使用的是CEF1。下载源码
- 设置依赖的cef库 libcef.lib、libcef_dll_wrapper.lib
- 代码实现
WebClient.h
/*************************************************
File Name : WebClient.h
Author : shaoyiju
Version : v1.00
DateTime : 2018-08-03
Description : 继承CEF的客户端类,创建客户端的逻辑在父窗口实现,相关资料请参考:
https://blog.csdn.net/farcall/article/details/37406359
https://blog.csdn.net/mushao999/article/details/37606189/
*************************************************/
#pragma once
#include "include/cef_app.h"
#include "include/cef_browser.h"
#include "include/cef_client.h"
//#include "include/wrapper/cef_closure_task.h"
//#include "include/wrapper/cef_helpers.h"
class CWebClient
: public CefClient
, public CefLifeSpanHandler
{
public:
CWebClient(){};
~CWebClient(){};
CefRefPtr<CefBrowser> GetBrowser() { return m_Browser; }
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() OVERRIDE
{
return this;
}
virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) OVERRIDE
{
m_Browser = browser;
}
// 添加CEF的SP虚函数
IMPLEMENT_REFCOUNTING(CWebClient);
IMPLEMENT_LOCKING(CWebClient);
protected:
CefRefPtr<CefBrowser> m_Browser;
};
在对话框类XXXDlg添加成员变量:
private:
CefRefPtr<CWebClient> m_webClient;
在对话框类XXXDlg::OnInitDialog中添加代码:
// 获取命令行参数
CefString strCmd = AfxGetApp()->m_lpCmdLine;
if (strCmd.empty())
{
strCmd = _T("https://www.baidu.com/");
}
// 创建浏览器客户端
CefRefPtr<CWebClient> client(new CWebClient());
m_webClient = client;
CefSettings cSettings;
CefSettingsTraits::init(&cSettings);
cSettings.multi_threaded_message_loop = true;
CefRefPtr<CefApp> spApp;
CefInitialize(cSettings, spApp);
CRect rc;
GetClientRect(rc);
CefWindowInfo info;
info.SetAsChild(m_hWnd, rc);
CefBrowserSettings browserSettings;
CefBrowser::CreateBrowser(info, static_cast<CefRefPtr<CefClient>>(client), strCmd.c_str(), browserSettings);
// 默认全屏
SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0);
在对话框类XXXDlg::OnSize中添加代码:
if(m_webClient.get())
{
CefRefPtr<CefBrowser> browser = m_webClient->GetBrowser();
if(browser)
{
CefWindowHandle hwnd = browser->GetWindowHandle();
CRect rc;
GetClientRect(rc);
::MoveWindow(hwnd, rc.left, rc.top, rc.Width(), rc.Height(), true);
}
}
编译运行,搞定!