目前界面不大,才几千行代码,所以我分割的也不是特别详细。
个人感觉,写这些东西,还是面向对象的思想比较好,所以,模块的组织方式,都是以面向对象的思想组织起来的。
我英语很差,没把这些玩意写成拼音,我很庆幸。
这套库现在的当务之急,就是寻找一个有效的同步或者互斥的方案,立刻修改为多线程安全版本,不然的话,以后修改的难度会大大增加。
从后往前说吧,
window.h 窗口模块,所有和窗口有关的东西,都在它里面处理,当然了,凡是能看到的东西都是窗口,所以都在它里面处理,
themeui.h 皮肤库模块,凡是和皮肤库相关的事情,都是它来作,包括加载皮肤,替换皮肤,等等(某窗口自绘界面它不管),
sheet.h 图层功能模块,这里比较复杂,是对所有图层的处理,凡是和图层相关的都归它管,所以这里很麻烦,
rect.h 很简单的矩形功能,帮助窗口模块定位置
memory.h 内存分配模块,我在这里实现内存管理,因为我不知道该如何有效地管理内存分配,所以我同时借鉴了Windows debug下内存泄漏的查询方法以及Linux下的brk内存管理方法(由于目前要么直接使用物理内存,要么使用应用程序的虚拟内存,且缺页机制的实现非软件实现,所以没必要也没有可能现在写内存分页机制)
list.h 双向链表模块,实现方法,纯纯地借鉴了Linux内核链表和Windows驱动链表,我就发现,Linux内核链表和Windows驱动链表实现思路基本上完全相同,为啥会出这种情况呢,难道是高手的共同思路么,还是怎么个意思,真的很神奇
key.h 实现键盘输入信息转换的模块,本来在里面准备写键盘的那些按键的功能的,但是最终我还没写,因为。。。。我想等有了同步与互斥的方案之后,整体重构的时候再说。
font.h 这个模块实现了文字功能,可以接受不同的字体文件,不同的字体信息,然后提供给上层来使用文字功能,提供各种文字属性。其实最开始的时候,我想使用Windows的TTF字体的,但是由于我没有研究过TTF字体,所以起码要找个路子了解一下吧,网上的各种资料各种找,结果,各种找不到,各种资料,各种说明,都明确表示,TTF字体是被包含在GDI部分,由HDC等等东西来解析的,于是,我不信,于是,我去逆微软的造字程序eudcedit.exe,结果,事实就是那么回事,字体会在HDC里面被处理,结果我放弃了,自己搞一套字体玩了。所以,现在我用的方法,自己弄得纯点阵做法,麻烦得要死,但是没办法。
filesys.h 这个是我准备做文件处理的模块,由于现在缺少一个可行的磁盘文件系统,所以,这个模块目前是空的,Linux下直接转接到了标准库里,ARM裸机下,我是直接转接到了内存中指定的位置
fb_draw.h 这个,是Linux下的 fb 画图功能支持文件,ARM裸机下,完全可以不用它,直接把画图的位置锁定到一块显存
draw.h 最复杂的,应该就是它了,而且我认为我写的最差的就是它,因为它里面的功能最杂最乱,这个画图功能里面,包含了画各种图形,圆形、矩形,各种线条,以及图片,图片的放大、缩小计算,都在这里完成,所以,我感觉,它的压力太大了,估计大多时间都是它在忙。
desktop.h 这个是桌面的独立模块,当初把它独立出来是因为,虽然它也是个窗口,但是所有窗口中只有它是最特殊的,所有窗口都可以销毁,就它不可以销毁,它代表了整个可显示区域的大小,它的宽度、高度就是所有可显示部分的宽度、高度,所有画图功能的基础都是它提供的,最终都是在它上面把东西呈现出来。这点,有点类似于windows XP里 explorer.exe 都关了,但是还有个蓝色的东西铺满了显示器,还有这么个东西没关,它如果关掉了,操作系统可能就是关机了。
debug.h 最后这个东西,只是便于调试。
其实,我现在发现,我写的很差,封装的还不够好,但是我不知道我应该如何正确地封装,
现在的情况:
图层配合窗口,再配合画图模块,根据矩形模块定位之后才能把界面画出来
画图模块配合字体模块才能显示文字
这里记录得很详细,希望以后我忘记了的时候,能想起到这里来看。