现在的位置: 首页 > 综合 > 正文

《30天自制操作系统》学习笔记——第十一天

2014年06月10日 ⁄ 综合 ⁄ 共 1167字 ⁄ 字号 评论关闭

       开头先评评这本书。在豆瓣上看到了关于此书的书评。有人觉得这书小儿科,有人觉得这书不错,我也在这里说两句。那这本书适合什么样的人看呢?首先是像我这样缺乏开发经验的人。本书展现了一个较为完整的开发过程。它相当于是代领读者一步步开发出了这个操作系统,但很现实的是没有debug的经验。另外,虽说它对操作系统的探讨不深入,而且实现的基本上也都是最简单的功能。但是我觉得在这个学习过程中,你是一直可以清清楚楚看到各项功能是如何实现的,可以感受到一个最基础的操作系统是怎样编写的。这在一般的操作系统的教科书里是学不到的。

       现在让我们轻松愉快地进入到第十一天的笔记吧。

                                       

       一开始先解决一个鼠标的小问题,即让鼠标焦点可以指到屏幕最右处。这里没有什么难度。

       今天的主要内容是制作窗口。其实也就是sheet图层结构的进一步的应用。

                                               

       画出一个像这样的图层不难,画的过程就不再赘述。接下来做了一个高速计数器(counter),这个也不难,但是这里开始,一个关于图层的问题显现出来了。什么呢?就是按照原来的刷新方法。还记得吗?就是从底下往上面所有的图层,指定范围后,都再画一遍。原来没有问题,但现在由于数字时时在变,刷新时就会出现闪烁的问题。这样很不好看,如何解决呢?这里的解决之道是指定h0.也就是说,咱刷新的时候,指定开始的图层的高度,不再从0,也就是背景层开始。这样的话,如果想要去掉闪烁,刷新的时候就可以指定文字所在图层刷新即可。

       这样的方法解决了文字的闪烁问题。但接下来又出了一个问题。当鼠标放在文字上时,就会先刷文字再刷鼠标,这样又出现了闪烁。这又该如何解决呢?原来的方法和思路显然已经解决不了了。而且一层层刷这样的思路确实简单粗暴。那么我们干脆做个大手术,把整个图层的刷新方式改了吧!

       这里引入了map的概念。map的概念就好像是在分山头:这个像素是属于图层1的,那个像素是属于图层2的。也就是说,map就是像素的一个属性,它告诉你这个像素此刻应该显示那个图层上的内容。看下图就更好理解了:


       我们可以想象,有了此刻的map,那么在我们刷新的时候就可以从最底层开始一层层地刷,每层在刷的时候,做一个判断,该像素的map与本图层号是否相同。这样的刷新方法可以顺利解决闪烁的问题。

       那么再往回推。如何获得此刻的map呢?这就需要刷map了。刷map就像咱们最初刷像素一样,简单粗暴,从下往上一层层刷,大的覆盖小的。因为map没有闪烁问题,所以这个方法虽简单粗暴,但完全够用。

       这么看来,虽然一开始的刷新方法最后被完全替换,但最后它还是有被用到map的刷新里去。

今天的内容比较少,到此结束。期待明天的笔记!

抱歉!评论已关闭.