我很忙
项目压力大,平时还要加班,有些休闲时间,还要学习Qt。。。所以,即使5千行代码的GuiLite,我还是没有充分的时间阅读。所以,我能提供的学习成本只有2小时!千万别说不行,现在视频长度都限制在15秒了,所以,你懂的。。。
2小时的可行性
极限学习的情况下,2小时是可行的。因为GuiLite不同于市面主流的通用UI框架,它们的差异如下:
比较项 | GuiLite | 通用UI |
代码量 | 5K+ | 1000K+ |
功能覆盖 | UI核心机制+基本UI控件 | 核心UI机制+丰富的UI控件+所见即所得的UI布局工具 |
使用方法 | 根据核心机制自由发挥 | 寻找适合自己的模板进行加工 |
学习重点 | UI核心机制 | 熟悉API使用方法 |
尽管,GuiLite从体量上看非常小,但2小时领会5千行的代码含义,也不现实;但好在可以继续做减法,去掉各种操作系统/显示硬件的适配层,去掉各种UI控件,去掉文字,位图的绘制,就只剩下两个文件了:wnd.cpp(有效代码600行), surface.cpp(有效代码500行)。从代码量上看,差不多可以达成学习目标。
代码阅读策略
没错,GuiLite的核心就是这两个文件,它们的职责如下:
wnd.cpp | 负责管理窗口,响应按触摸/鼠标按下/释放消息 |
surface.cpp | 负责绘制基本像素及线条/矩形和图层管理 |
大家,可以思考一下,你使用的UI框架可能有所不同,但核心要素是不是就是上面两点呢?回到正题,我们只有2小时,如何分配代码阅读时间呢?
我们建议:
使用20~30分钟简单浏览一下surface.cpp,至于如何画点/线/面,初中生都知道,大家check一下功能就好,至于图层管理只有一个函数(set_frame_rect),建议大家略过,放弃研读;因为它需要结合HelloMario这个例子,才便于理解;当然大神可以无视这个建议。
使用30~90分钟详细阅读wnd.cpp,将所有函数的实现看明白。这些函数大部分是赋值操,本身逻辑性不强,遇到这些函数尽快完成浏览,主要精力需要集中在两个函数的理解上:connect,on_touch_down,on_notify;它们功能分别是:
connect | 建立一个窗口(该窗口可能含有子窗口系列),初始化所有必要的数据结构 |
on_touch_down | 窗口响应鼠标按下消息,包括:寻找哪个窗口被点中,处理被点中(获得焦点)的窗口,处理上次被点中(失去焦点)的窗口 |
on_notify | 调用用户注册的响应函数,例如:按键响应 |
总结
当然了解了核心,并不意味着马上就可以灵活运用,它只是在更深的层次帮你解释GuiLite的运行机制,帮助你精确预言UI可能发生的行为。如何有效的运用?还需要参看GuiLiteSamples这些“小而美”的实例代码,由于它们充分挖掘了UI核心,所以代码量往往在100行上下,相信能对大家产生一些启发。
世界上往往没有绝对的捷径,但可能存在一些事半功倍的方法。这是我们的经验,仅供参考,寻找适合自己的模式,放松对2小时的苛求,相信大家都能掌握GuiLite的核心原理(机制);我们相信这些核心原理具有一定的普遍性,无论你是学习Qt,MFC,Winforms,相信都会有所帮助,祝大家学习顺利!