读源代码有感!(转载)((雄)blog.csdn.net/mickey139)
reactos吧
全部回复
仅看楼主
level 6
fros 楼主
2009年04月09日 04点04分 1
level 6
fros 楼主
2008-3-04 周二, 10:03 标题: 读源代码有感! 引用回复
这几天在看HAL.DLL,前些日子在看ntoskrnl.exe,最初是通过看freeldr.sys一直看过来的。后来发现仅仅是看,不去总结是没有效果的。很早以前是在看有关窗口的运行原理。最初是对windows的窗口的原理感兴趣。觉得如果自己有一天也可以搞出个类似windows的小程序。有自己的窗口系统。不一定健壮只要能运行就可以。出于这个目的才开始了解有关窗口的机制。
于是在网上收集了很多有关窗口的程序。最初是文本界面的窗口系统。比较出名的是borland的tvision一个用c++写的文本窗口,很完善。有窗口,菜单,对话框,按钮好多东西。不过就是效果上差了点。因为是文本的嘛。
在然后就接触到了一个叫minigui的一个运行在linux下的嵌入式窗口图形库。这个玩意也是个好东西。就是在底层的绘图驱动上作的太复杂,因为要吸纳很多图形驱动。而且窗口的机制感觉类似x-window。刚开始不太懂。了解起来也是比较复杂。不过整个系统对客户来说编程的方法和思路基本与 windows类似,也是采用消息驱动。而且功能和窗口元素方面也比较完备,最主要的是国人自己搞的。
后来发现一个叫microwindows的一个自由项目,也是针对潜入试的,不过这个项目后来停止了。它有两套方案。底层采用一致的驱动方式。上层一套类似linux的 x-window,一套类似windows的窗口机制,有很多也兼容windows的API做的很小巧,但是基本不适用。因为底层的效率不行,而且那些类似windows的API健壮性和很差。不过非常适合研究窗口机制(这个地方的窗口机制仅仅是指:窗口的创建,显示,隐藏,移动,还有按钮等界面元素,以及一些GDI函数。这些并不属于底层的OS不要把窗口机制和windows系统搞混淆),总的一句话,因为这个系统很直接,没有什么太多复杂的概念,在你了解窗口机制时可以直接知道每个函数做了什么。最关键的是它是一个单任务的系统,不牵涉到多任务,思路就不会那么复杂了。
后来发现了Wine这个东西,同样也是想了解它的窗口机制。因为microwindow的窗口机制并不完善。而且GDI部分也不完善。所以开始在 wine里查找答案,最后发现是基本是徒劳。因为wine的GDI最后是调用linux的图形库。哇,linux的图形库后面又有一大堆驱动的概念。算了。不过在wine上还是看到了一些优秀的窗口机制实现的代码
最后ReactOS,完完全全的一个兼容windows的产品。不过刚开始还是仅仅想了解它的窗口机制。因为在这里你可以找到最终的实现代码,不像wine,在reactos上我又了解了一些底层的实现,主要是GDI方面的。GDI简单的说包括两个方面的图形代码:
1。自己实现的主要用于设备无关的图形绘制。(这里是个大头,很有意思。因为“图形驱动”有时候会简化开发,仅仅提供一些简单的绘制。驱动会反过来调用GDI的绘制,而GDI又将复杂的绘制简化成驱动层实现的简单绘制)
2。调用具体的现实驱动层的,设备有关的图形绘制
不过在窗口管理方面reactos借助的wine有一个功能是我至今也没有发现的,那就是对owner窗口排序。什么是owner窗口排序?
比如在一个有对话框的环境中,一个普通的层叠窗口也许会产生一个对话框来与用户交互,然后这个对话框可能又会产生另一个对话框。那现在就
有两个对话框。第一个对话框的owner是层叠窗口,第二个对话框的owner是第一个对话框(他们会建立一个拥有与被拥有的关系)
然后也许你有启动了另一个应用程序,这是桌面会产生另一个成叠窗口,同样也许还有产生这个窗口的对话框,这时窗口树类似下图:
2009年04月09日 04点04分 2
level 6
fros 楼主
2009年04月09日 04点04分 4
1