真正能用的!!把cef3集成到MFC中的一些坑

把cef3集成到MFC中的一些坑

https://www.jianshu.com/p/5f8517c186ed

https://www.2cto.com/kf/201602/489654.html

https://www.2cto.com/kf/201808/770448.html

https://blog.csdn.net/zhangzq86/article/details/70171121

https://www.cnblogs.com/wainiwann/p/11014963.html

https://wenku.baidu.com/view/a8663fdea1116c175f0e7cd184254b35effd1a5e.html

96 毛毛v5 关注

 0.6 2019.03.13 15:11* 字数 2140 阅读 1965评论 0喜欢 2

cef3变化太大了。要注意版本。笔者所用版本为:cef_binary_3.3626.1895.g7001d56_windows32 版本。在将cef3集成到MFC时,遇到了一些问题。google了很多文档,都是针对几个月之前的版本,由于api变化太多,某些坑不能解决。现在做一下记录,防止下次再掉坑里。

 

 

 

https://www.jianshu.com/p/5f8517c186ed

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cef3 mfc 测试demo windows vs2015工程 windows vs2015mfc开发的嵌入式浏览器DEMO,完整工程,包含了库文件libcef_dll_wrapper.lib和libcef.lib。 1、库版本为cef_binary_3.2704.1414.g185cd6c_windows32,引用于http://opensource.spotify.com/cefbuilds/index.html。 如需要其它版本或VS2013/vs2017等编译的库,可以去opensource.spotify.com下载自行编译,编译需要安装 cmake. 2、工程引用于https://github.com/xiaonaiquan/CEF3,github上缺少了上面的库。 3、此工程为MFC工程,只适用于WINDOWS。opensource.spotify.com的原装示例不是MFC的,而是标准windows库的。 使用的cef版本为cef_binary_3.2704.1414.g185cd6c_windows32 此demo编译,VS2015 实现了C++和js交互 使用CEF时,加载的网页,如果里面有链接,指定target=”_blank”,则会弹出一个新的浏览窗口。如果想禁掉,让新页面在当前浏览窗口显示,可以在browser进程的handler里重写CefLifeSpanHandler的OnBeforePopup方法,用browser的mainFrame加载popup请求的url 使用flash的方法在我CSDN博客,把代码加入进来就可以了。 browser和render进程分别继承CefAPP test.html是网页测试用例 解决flash有黑框 : http://blog.csdn.net/zhuhongshu/article/details/77482985 实现下载功能(是网页上触发下载,并不是MFC触发下载) GO按钮增加了快捷键回车 增加F5刷新 增加前进和后退按钮 增加右键和F12开发者选项调试网页 增加cookie 参考 : https://github.com/xiaonaiquan/CEF3 http://opensource.spotify.com/cefbuilds/index.html
下面是一个示例程序,展示了如何在 MFC 多文档视图集成 CEF3,并处理消息循环: ``` // MyDoc.h 文件 class CMyDoc : public CDocument { DECLARE_DYNCREATE(CMyDoc) public: CMyDoc(); virtual ~CMyDoc(); protected: DECLARE_MESSAGE_MAP() public: virtual BOOL OnNewDocument(); virtual void Serialize(CArchive& ar); public: CefRefPtr<CefBrowser> m_browser; // CEF3 浏览器对象 }; // MyDoc.cpp 文件 IMPLEMENT_DYNCREATE(CMyDoc, CDocument) BEGIN_MESSAGE_MAP(CMyDoc, CDocument) END_MESSAGE_MAP() CMyDoc::CMyDoc() { } CMyDoc::~CMyDoc() { } BOOL CMyDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; // 创建 CEF3 的浏览器对象 CefWindowInfo window_info; window_info.SetAsChild(::GetDesktopWindow(), CRect(0, 0, 800, 600)); CefBrowserSettings browser_settings; CefRefPtr<CefClient> client(new CMyClient); m_browser = CefBrowserHost::CreateBrowserSync(window_info, client, _T("http://www.baidu.com"), browser_settings, NULL); return TRUE; } void CMyDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { } else { } } // MyView.h 文件 class CMyView : public CView { DECLARE_DYNCREATE(CMyView) public: CMyView(); virtual ~CMyView(); protected: DECLARE_MESSAGE_MAP() public: virtual void OnDraw(CDC* pDC); virtual BOOL PreCreateWindow(CREATESTRUCT& cs); virtual void OnInitialUpdate(); public: CefRefPtr<CefBrowser> m_browser; // CEF3 浏览器对象 }; // MyView.cpp 文件 IMPLEMENT_DYNCREATE(CMyView, CView) BEGIN_MESSAGE_MAP(CMyView, CView) END_MESSAGE_MAP() CMyView::CMyView() { } CMyView::~CMyView() { } void CMyView::OnDraw(CDC* pDC) { CDocument* pDoc = GetDocument(); // TODO: 在此添加绘制代码 } BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs) { if (!CView::PreCreateWindow(cs)) return FALSE; // TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或样式 return TRUE; } void CMyView::OnInitialUpdate() { CView::OnInitialUpdate(); // 获取文档对象 CMyDoc* pDoc = dynamic_cast<CMyDoc*>(GetDocument()); if (!pDoc) return; // 获取 CEF3 的浏览器对象 m_browser = pDoc->m_browser; if (!m_browser) return; // 获取浏览器的窗口句柄 CefWindowHandle hwnd = m_browser->GetHost()->GetWindowHandle(); if (!hwnd) return; // 设置浏览器的窗口句柄为视图的子窗口 SetParent(hwnd); // 运行 CEF3 的消息循环 CefRefPtr<CefMessageLoop> message_loop = CefMessageLoop::GetForCurrentThread(); while (message_loop->ContinueProcessingMessage()) { CWinApp::OnIdle(); // 处理 MFC 的空闲消息 } } ``` 在上面的示例程序,我们在 CMyDoc 类的 OnNewDocument 函数创建了 CEF3 的浏览器对象。在 CMyView 类的 OnInitialUpdate 函数获取浏览器对象,并将浏览器的窗口句柄设置为视图的子窗口。然后,在该函数加入了 CEF3 的消息循环,并在其处理了 MFC 的空闲消息。 需要注意的是,使用 CEF3 需要包含 CEF3 的其他头文件和库文件。具体的头文件和库文件可以参考 CEF3 的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值