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

该博客介绍了在VS2010平台开发内嵌浏览器内核MFC客户端的过程。此客户端运行时占用内存与一般浏览器相近,使用的是CEF1版本。还说明了下载源码、设置依赖cef库,以及代码实现步骤,最后编译运行即可完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 简介:这是一个在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.youkuaiyun.com/farcall/article/details/37406359
			  https://blog.youkuaiyun.com/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);
    }
}

编译运行,搞定!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值