浏览器代码已开源:欢迎收藏 https://github.com/JelinYao/MyChrome
前言:
编译Chrome开源代码是一件很恐怖的事情,代码庞大,还需要各种工具配合。在windows上快速开发chrome内核网页程序,Libcef是一个很好的选择。最近趁空闲时间,写了一个简单的浏览器,很多功能都没有完善,不知道以后还会不会继续写了,PC端确实是萎了。
1、Libcef 的使用
在前面的几篇文章中大概介绍了下Libcef的使用,很多时候我们都会遇到各种问题,建议去看看它的接口函数声明,里面的注释写的非常清楚。
Windows上使用CEF嵌入基于chrome内核浏览器小例
2、大概的要点
程序运行截图
首先需要解决的是浏览器的Tab控件,扩展Duilib控件,每一个Tab控件就是一个容器里面存放着一系列Item,根据Item的个数和Tab的尺寸来计算每一个Item 节点的宽度。
对于单个节点Item控件,里面又有一个子Button控件,也就是关闭按钮。对于这个Item的消息进行处理,包括选中、双击、关闭,把这些消息都转发到父控件Tab中去处理。Tab控件同一管理这些控件的哪一个是选中状态。
然后是Libcef控件的创建,Tab中点击Add按钮后,需要创建网页控件并加载到当前窗口中去。整个父窗口在大小发生变化时,又要通知里面所有的Libcef子窗口随之变化。
然后就是关闭时,要让所有的Libcef子进程都能正常退出,就必须按照Libef文档说的那样,在退出时调用CefQuitMessageLoop()。
3、部分源代码
Duilib扩展Tab控件
#pragma once
#include "ScrollTabUI.h"
class CScrollOptionUI :
public CContainerUI
{
public:
CScrollOptionUI(void);
~CScrollOptionUI(void);
void SetParent(CScrollTabUI* pTab) { m_pParent = pTab; }
protected:
virtual void Init();
virtual void PaintText(HDC hDC);
virtual void SetPos(RECT rc);
virtual void DoEvent(TEventUI& event);
bool OnBtnClose(void* pParam);
private:
CButtonUI* m_pBtnExit;
CScrollTabUI* m_pParent;
};
#include "StdAfx.h"
#include "ScrollOptionUI.h"
#define BTN_CLOSE_WIDTH 14
#define BTN_CLOSE_HEIGHT 14
CScrollOptionUI::CScrollOptionUI(void)
: m_pBtnExit(NULL)
, m_pParent(NULL)
{
}
CScrollOptionUI::~CScrollOptionUI(void)
{
}
void CScrollOptionUI::Init()
{
m_pBtnExit = new CButtonUI;
CDuiString strAttr;
strAttr