MFC嵌入CEF谷歌浏览器项目源码

 简介:这是一个在VS2010平台开发内嵌浏览器内核MFC客户端。运行就来占用内存和一般浏览器差别不大。 目前CEF最新的版本已经更新到CEF3,本项目所使用的是CEF1。下载源码

  1. 设置依赖的cef库 libcef.lib、libcef_dll_wrapper.lib设置cef依赖库
  2. 代码实现

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);
    }
}

编译运行,搞定!

猜你喜欢

转载自blog.csdn.net/shaoyiju/article/details/82116015