1.2. chromium源代码分析 - chromiumframe - 入口函数

ChromiumFrame的入口函数在main.cpp中,在sourceinsight中搜索main.cpp会发现有2个,我需要看的是test_view目录下的,test_base不在工程范围内,忽略掉。
main.cpp
中包含3个类和_tWinMain函数。
_tWinMain就是我们要找的入口函数。我做了部分注释:
int APIENTRY _tWinMain(HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPTSTR    lpCmdLine,
                       int       nCmdShow)
{
	// 1. 支持OLE,退出管理机制,GDIPlus 初始化,本地资源管理(new)
    HRESULT hRes = OleInitialize(NULL);
    base::AtExitManager exit_manager;
    gfx::GdiplusInitializer gdiplus_initializer;
    gdiplus_initializer.Init();
	ResourceBundle::InitSharedInstance(base::FilePath());
    ResourceBundle::GetSharedInstance().SetIdConveter(new AppIdConveter());
	
	// 2. 创建窗口(包含WNDCLASS注册)
    view::AcceleratorHandler handler;
    MessageLoop loop(MessageLoop::TYPE_UI);
    MainWindowDelegate delegate;
    view::Window::CreateNativeWindow(NULL, gfx::Rect(), &delegate);
    delegate.window()->SetWindowBounds(gfx::Rect(0, 0, 500, 500), NULL);
    delegate.window()->Show();

	// 3. 启动消息循环 
    MessageLoopForUI::current()->Run(&handler);

	// 4. 退出处理(new)
    ResourceBundle::CleanupSharedInstance();
    gdiplus_initializer.UnInit();
    OleUninitialize();
}

参考注释,发现这里只比1.1中提到win32典型程序的WinMain多了 支持OLE,退出管理机制,GDIPlus 初始化,本地资源管理。

1.1文中提到的1. WNDCLASS注册   2. 窗口的创建   3. 启动消息循环也被包装后,在这里都有调用。骨架未变,只是包装上了华丽的Message framework。

注册WNDCLASS和创建窗口在这里:

view::Window::CreateNativeWindow(NULL, gfx::Rect(), &delegate);

消息循环在这里:

MessageLoopForUI::current()->Run(&handler);


3个类分别是MainView / MainWindowDelegate / AppIdConveter

1. 最重要的就是 MainWindowDelegate类,MainWindowDelegate继承自WindowDelegate,WindowDelegate是窗口类一个委托类,通过在MainWindowDelegate重载虚函数,从而达到控制窗口的行为。需要提一下的是,google这里是完全的面向对象,而非MFC中使用set方式来设置窗口的行为。这样的方式在chromium中比比皆是。不要被弄的晕头转向才好。
2. AppIdConveter类,只是资源ID转换的一个辅助类而已。

3. MainView控制窗口中view的行为,这里只是告知了view的大小。在MainWindowDelegate中告知窗口的包含view就是MainView,窗口的大小也就跟随了包含view的大小。(其中关系并非这么简单,但暂时可以这么理解)


接下来就由_tWinMain出发了解Message framework.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值