zoukankan      html  css  js  c++  java
  • 1.2. chromium源代码分析

    ChromiumFrame的入口函数在main.cpp中,打开main.cpp.
    中包含3个类和_tWinMain函数。
    _tWinMain就是我们要找的入口函数。我做了部分注释:

     1 int APIENTRY _tWinMain(HINSTANCE hInstance,
     2                        HINSTANCE hPrevInstance,
     3                        LPTSTR    lpCmdLine,
     4                        int       nCmdShow)
     5 {
     6     // 1. 支持OLE,退出管理机制,GDIPlus 初始化,本地资源管理(new)
     7     HRESULT hRes = OleInitialize(NULL);
     8     base::AtExitManager exit_manager;
     9     gfx::GdiplusInitializer gdiplus_initializer;
    10     gdiplus_initializer.Init();
    11     ResourceBundle::InitSharedInstance(base::FilePath());
    12     ResourceBundle::GetSharedInstance().SetIdConveter(new AppIdConveter());
    13     
    14     // 2. 创建窗口(包含WNDCLASS注册)
    15     view::AcceleratorHandler handler;
    16     MessageLoop loop(MessageLoop::TYPE_UI);
    17     MainWindowDelegate delegate;
    18     view::Window::CreateNativeWindow(NULL, gfx::Rect(), &delegate);
    19     delegate.window()->SetWindowBounds(gfx::Rect(0, 0, 500, 500), NULL);
    20     delegate.window()->Show();
    21 
    22     // 3. 启动消息循环 
    23     MessageLoopForUI::current()->Run(&handler);
    24 
    25     // 4. 退出处理(new)
    26     ResourceBundle::CleanupSharedInstance();
    27     gdiplus_initializer.UnInit();
    28     OleUninitialize();
    29 }

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

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

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

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

    消息循环在这里:

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

    3个类分别是MainView / MainWindowDelegate / AppIdConveter

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

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

    接下来就由_tWinMain出发了解view framework.

  • 相关阅读:
    hdu 2485 Destroying the bus stations 迭代加深搜索
    hdu 2487 Ugly Windows 模拟
    hdu 2492 Ping pong 线段树
    hdu 1059 Dividing 多重背包
    hdu 3315 My Brute 费用流,费用最小且代价最小
    第四天 下载网络图片显示
    第三天 单元测试和数据库操作
    第二天 布局文件
    第一天 安卓简介
    Android 获取存储空间
  • 原文地址:https://www.cnblogs.com/mfcjck/p/chromium002.html
Copyright © 2011-2022 走看看