1.1. chromium源代码分析 - chromiumframe - 介绍

本人能力有效,面对chromium庞大的代码就头大。还是先由前辈的chromiumFrame入手。

1. chromeFrame概貌

chromiumFrame是前辈的心血之作,以最小化的方式抽出chromium界面部分的代码,并以demo的方式展现给我。让我可以不用直接面对chromium这样的庞然大物。

先看看chromiumFrame目录结构,

animation,静态库,动画类。

base,基础静态库,一些logging,只能指针等基础的东东。

gfx,画图的基础库,对windows上的GDIPlus做了不少封装。

message_framework,消息静态库,windows的消息都封装在里面,对外部暴露出delegate类,也是设计模式上常见的delegate模式。

rfc_algorithm,算法静态库,base64,CRC,还有JSON等的封装都在里面。

third_party,第三方库的静态库,集合多个三方库而成。

view_framework,是关键所在的view静态库,重要的view,控件以及UI处理都在这里,这里也将是我所要看的重点。

test_view:是可执行程序的工程。

library.sln:直接用vs打开就能加载所有项目。

以下是打开library工程的样子:

这里要设置test_view为主工程,编译所有就可以得到可执行程序了。

看看效果图:

下图是编译后的chromiumFrame截图:

chromium方面有用到WTL的东西,学习chromium之前需要了解WTL的原理,其中最主要的是父类模板,子类来实例化模板参数的使用技巧。从而在不使用虚函数的前提下,达到多态的效果。关于WTL,推荐星轨工作室翻译的文章http://www.winmsg.com/cn/orbit.htm (文章链接在星轨网页的最后一项)。

2.win32基础

winAPI创建一个win32程序的核心代码也比较重要,chromium就是在这个上面进行扩展出优美UI界面。

win32程序核心代码分两部分:

1.入口函数WinMain

 1 int WINAPI WinMain(
 2   HINSTANCE hInstance,      // handle to current instance
 3   HINSTANCE hPrevInstance,  // handle to previous instance
 4   LPSTR lpCmdLine,          // command line
 5   int nCmdShow              // show state
 6 )
 7 {
 8        // 1. WNDCLASS注册
 9        WNDCLASS wndcls;
10        wndcls.cbClsExtra=0;
11        wndcls.cbWndExtra=0;
12        wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
13        wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
14        wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
15        wndcls.hInstance=hInstance;
16        wndcls.lpfnWndProc=WinProc;
17        wndcls.lpszClassName="win_class";
18        wndcls.lpszMenuName=NULL;
19        wndcls.style=CS_HREDRAW | CS_VREDRAW;
20        RegisterClass(&wndcls);
21
22        // 2. 窗口的创建
23        HWND hwnd=CreateWindow("win_class","title",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
24        ShowWindow(hwnd,SW_SHOWNORMAL);
25        UpdateWindow(hwnd);
26
27        // 3. 启动消息循环
28        MSG msg;
29        while(GetMessage(&msg,NULL,0,0))
30        {
31               TranslateMessage(&msg);
32               DispatchMessage(&msg);
33        }
34        return msg.wParam;
35 }

2. 消息处理函数

 1 LRESULT CALLBACK WinProc(
 2   HWND hwnd,      // handle to window
 3   UINT uMsg,      // message identifier
 4   WPARAM wParam,  // first message parameter
 5   LPARAM lParam   // second message parameter
 6 )
 7 {
 8        switch(uMsg)
 9        {
10        case WM_PAINT:
11               HDC hDC;
12               PAINTSTRUCT ps;
13               hDC=BeginPaint(hwnd,&ps);
14               TextOut(hDC,0,0,"mfcjck",strlen("mfcjck"));
15               EndPaint(hwnd,&ps);
16               break;
17        case WM_DESTROY:
18               PostQuitMessage(0);
19               break;
20        default:
21               return DefWindowProc(hwnd,uMsg,wParam,lParam);
22        }
23        return 0;
24 }
时间: 2024-10-15 10:44:23

1.1. chromium源代码分析 - chromiumframe - 介绍的相关文章

1.4. chromium源代码分析 - chromiumframe - 消息系列

Message framework 是对消息循环的封装和扩展,Chromium在消息循环中增加处理内部任务的工作.将内部工作处理寄生在Windows的消息循环中,会有一个问题,就是没有Windows自身消息,而有Chromium内部工作,此时内部动作就无法及时处理.Chromium这里定义了一个自定义消息kMsgHaveWork,用来在Chromium内部有工作的时候,驱动Windows的消息一直会运行. 从代码级别来说,Chromium内部工作队列被塞入工作时Post一条kMsgHaveWor

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

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 H

0. chromium源代码分析 - 序

本打算在CSDN写完这系列文字,却因为在CSDN中误删了一篇blog,该篇blog被移到了回收站.然而CSDN居然没有从回收站撤销删除的操作方法.联想到之前CSDN泄密的问题,其可靠性值得怀疑.随转向CNBlog来写这些文字. 偷得浮生半日闲.忙中偷闲看看chromium代码.看过一段,不禁感慨,不亏是一流的公司,写出的架构也是不一般.不看代码,就凭chrome在windows上运行的效率也能感受到chromium代码上的高效. 本人能有幸看到chromium的源代码,还要感谢google为开源

Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6633311 在上一篇文章中,我 们分析了Android系统进程间通信机制Binder中的Server在启动过程使用Service Manager的addService接口把自己添加到Service Manager守护过程中接受管理.在这一篇文章中,我们将深入到Binder驱动程序源代码去分析Client是如何通过Service Manager的

Chromium多进程架构简要介绍和学习计划

Chromium以多进程架构著称,它主要包含四类进程,分别是Browser进程.Render进程.GPU进程和Plugin进程.之所以要将Render进程.GPU进程和Plugin进程独立出来,是为了解决它们的不稳定性问题.也就是说,Render进程.GPU进程和Plugin进程由于不稳定而引发的Crash不会导致整个浏览器崩溃.本文就对Chromium的多进程架构进行简要介绍,以及制定学习计划. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 一个Chr

Java中arraylist和linkedlist源代码分析与性能比較

Java中arraylist和linkedlist源代码分析与性能比較 1,简单介绍 在java开发中比較经常使用的数据结构是arraylist和linkedlist,本文主要从源代码角度分析arraylist和linkedlist的性能. 2,arraylist源代码分析 Arraylist底层的数据结构是一个对象数组.有一个size的成员变量标记数组中元素的个数,例如以下图: * The array buffer into which the elements of the ArrayLis

转:RTMPDump源代码分析

0: 主要函数调用分析 rtmpdump 是一个用来处理 RTMP 流媒体的开源工具包,支持 rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://.也提供 Android 版本. 最近研究了一下它内部函数调用的关系. 下面列出几个主要的函数的调用关系. RTMPDump用于下载RTMP流媒体的函数Download: 用于建立网络连接(NetConnect)的函数Connect: 用于建立网络流(NetStream)的函数 rtmpdump源代码

Kafka SocketServer源代码分析

Kafka SocketServer源代码分析 标签: kafka 本文将详细分析Kafka SocketServer的相关源码. 总体设计 Kafka SocketServer是基于Java NIO来开发的,采用了Reactor的模式,其中包含了1个Acceptor负责接受客户端请求,N个Processor负责读写数据,M个Handler来处理业务逻辑.在Acceptor和Processor,Processor和Handler之间都有队列来缓冲请求. kafka.network.Accepto

Spark SQL之External DataSource外部数据源(二)源代码分析

上周Spark1.2刚公布,周末在家没事,把这个特性给了解一下,顺便分析下源代码,看一看这个特性是怎样设计及实现的. /** Spark SQL源代码分析系列文章*/ (Ps: External DataSource使用篇地址:Spark SQL之External DataSource外部数据源(一)演示样例 http://blog.csdn.net/oopsoom/article/details/42061077) 一.Sources包核心 Spark SQL在Spark1.2中提供了Exte