minigui源码分析(一)

转载:https://blog.csdn.net/doon/article/details/7063159

背后的故事

从接触MiniGUI到现在已经5年了,在飞漫也工作了4年多。由于种种原因,加上android的冲击,minigui越来越式微。让人感觉很痛心。

如今赋闲在家,无所事事,正好利用年末和春节这段时间,把这几年来对minigui所做、所想、所悟分享出来,一来,对以往的工作做个总结;

二来趁minigui即将开源之际,对minigui推波助澜;三来,希望把这款优秀的开源软件介绍给大家,希望更多的人能够从中汲取创作的灵感。


根据内部消息,MiniGUI即将开源,大家可以关注官方微博 http://weibo.com/fm0minigui

文章中即将提到的很多内容点,主要基于开源版本1.6.10,对应的是即将开源的3.0版本,以前的1.3.0(对应商用的2.0.4版本)的内容差异很小,大家可以对照查阅。


大家可以从http://sourceforge.net/projects/minigui/files/minigui/GPL-V1.6.10/这个地址获取开源版本。


MiniGUI及其组件,官方包括MiniGUI, mgplus(基于agg的高级2D图形库,实现路径、反锯齿、颜色模式等功能), mgutils(基于MiniGUI的公共对话框,如颜色对话框,字体选择对话框,保存/打开对话框等),mGNCS(miniGui New Control Set, 为开发miniStudio特地开发的新版本控件集,其中使用C来模拟C++的控件集,它统一了控件接口,易于使用,易于集成在miniStudio中,种类繁多,功能强大),mGEff(MiniGUI的特效库,可以实现各种窗口特效),mgi(minigui的输入法组件,已经基本被废弃,输入法框架被集成在mGNCS中),以及mDolphin(基于webkit的浏览器,也可能会开源,如果开源的话,我将逐步的介绍mDolphin给大家)

非官方的组件中,有MGFC(MiniGui Foundation Classes,是仿照MFC做得一个简单的C++封装库,在miniStudio中,被用作GUIBuilder的基础界面库,2008年后就停止更新了),该组件是由本人开发的,因为在飞漫工作忙,一直没有维护和更新。在http://download.csdn.net/detail/doon/3910390上可以获取一个免费得版本。


以上中,我对minigui、mgfc、mGNC参与最多的,将安排一系列的文章,逐步介绍这3个组件,其他的组件,将根据我得了解,尽可能多得给大家介绍。


计划和安排

目前计划依次介绍MiniGUI, MGFC,和mGNCS,将分成若干节,时间安排上,在有时间时,尽可能多得更新相关章节。


没有太详细的计划,想到哪里讲到哪里,请大家多包涵了。
正式开讲
首先介绍minigui。关于minigui的详细介绍不在多说,大家可以参考 http://www.fmsoft.cn/products/minigui/introduction.html上得说明。

在此之前,需要说明:MiniGUI可以移植到多个系统上,包括windows、linux、vxworks以及各种RTOS系统中,为了通用性,我主要以linux为基础讲解。
当然,关于MiniGUI的移植,大家可以找官方网站去搜索。我的目的只是为大家剖析MiniGUI,所以,太过基础的东西就不在这里讲解了。

MiniGUI的结构,从根本上讲,分成两大部分:

    GDI -- 即图形绘制系统,它将各种图形绘制到一块内存中,实现显示的效果
    窗口管理系统-- 管理多个窗口及窗口的交互,涉及到消息管理子系统、多窗口系统、控件管理系统

这两个系统中,窗口管理系统依赖于GDI系统。

GDI系统包括3个层次,底层是GAL,即Graphics Abstract Layer,在MiniGUI中,它抽象一个Framebuffer,相当于一块显存;其次是Surface层,表示一个显存表面,管理一块显存或者普通内存(作为内存Surface存在);最上层是HDC,即Handle of Device Context,是设备上下文句柄,包涵绘制时的众多状态,如画笔的属性、画刷的属性等等。HDC是对Surface的封装和隔离,多个HDC可以作用到一个Surface上。

GDI还有一系列的子系统,包括图像子系统,可以管理、绘制图片;字体子系统,负责加载、管理、使用字体;图形绘制系统,包含绘制矩形、圆形、多边形、填充等函数;剪切域系统,负责处理和实现各种剪切域,防止绘制超出窗口范围。


窗口管理系统涉及的内容比较多,而且由于minigui支持3个运行模式(standalone -- 所有的消息循环都在一个执行路径中完成;thread模式--多线程版本;process模式多进程版本),相对复杂。为简化,我们介绍多线程版本,这也是使用最多的版本。
窗口管理系统涉及IAL(Input Abstract Layer),消息管理子系统,主窗口管理子系统,控件子系统,定时器子系统来共同完成。


在介绍具体内容之前,我们先介绍下MiniGUI的源码结构。MiniGUI的源代码核心包括include和src两个文件夹。include文件夹包含的是所有的头文件,是开发minigui程序时必备的;src文件夹内包含的是众多实现。我们一点一点的介绍。

include文件夹:

    common.h 定义最基本的内容,包括minigui的版本、配置信息,基本的数据结构,基本的宏、枚举定义等,必须首先被包含
    minigui.h ,定义了和MiniGUi系统相关的基础函数、全局变量以及MiniGUI的入口函数等
    gdi.h 定义了MiniGUI自带的GDI的函数
    window.h 定义了所有和窗口相关的函数
    fxiedmath.h 定义了定点数运算相关的函数。可以用在不支持浮点数的处理器上,或者用在一些需要高速运算的场合,以提高速度
    control.h 这是所有控件定义头文件,它实际上include了ctrl目录下的头文件。真正的定义都在ctrl目录下。

src的目录下面包括众多的目录,

    include 是内部使用的不对外的头文件的目录
    newgal 是GAL的目录,由于gal部分被重构过,为区别,命名为newgal。gal目录已经被废弃
    newgdi 是GDI的目录,同上。gdi目录以及被废弃
    gui 是实现窗口的主要目录
    font 是字体的实现目录
    ial IAL的目录
    control 是常用控件的实现目录
    ex_ctrl是扩展控件的实现目录,包括listview、iconview等
    textedit 是后来重构的textditor控件的目录
    misc是杂项,包括ini文件管理、字符串池管理等功能
    sysres是系统资源管理目录,其中包括资源管理模块和内建资源的代码
    kernel 主要是消息系统、消息分发系统的代码
    server、client 目录是针对进程版的
    standalone目录下存放的主要是和standalone版本相关的代码

MiniGUI简要就介绍到这里,接下来,我将围绕一个HelloWorld程序,先简要的说明MiniGUI的各个部分是如何一起协同工作的,然后,我再就每个子系统详细的做说明。
————————————————
版权声明:本文为CSDN博主「漂流的代码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/doon/article/details/7063159

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uC-GUI-V3-98-完整码未删减版本,内容很全面。文件目录列表 ─uC-GUI ├─Doc ├─Sample │ ├─Application │ │ ├─Dashboard │ │ ├─NEC_BuildingManagem │ │ └─NEC_Pingpong │ ├─GUI │ │ ├─VSCREEN_MultiPage │ │ └─WIDGET_Checkbox │ ├─GUIDemo │ ├─GUI_X │ ├─LCDConf │ │ ├─LCD0323 │ │ ├─LCD07X1 │ │ ├─LCD1200 │ │ ├─LCD13701 │ │ ├─LCD1611 │ │ ├─LCD161620 │ │ ├─LCD1781 │ │ ├─LCD501 │ │ ├─LCD6331 │ │ ├─LCD66750 │ │ ├─LCD667XX │ │ ├─LCDColorOnMono │ │ ├─LCDFujitsu │ │ ├─LCDLin │ │ ├─LCDLin32 │ │ ├─LCDMem │ │ ├─LCDMemC │ │ ├─LCDPage1bpp │ │ ├─LCDPage4bpp │ │ ├─LCDSLin │ │ ├─LCDVesa │ │ └─LCDXylon │ ├─LCD_X │ └─MakeLib │ ├─8051_Keil │ ├─ARM_GNU │ ├─ARM_IAR │ ├─M16C_NC30 │ ├─M16C_TASKING │ ├─M32C_NC308 │ ├─MC80_IAR │ ├─MSP430_IAR │ ├─V850_GHS │ ├─WIN32_MSVC60 │ ├─WIN32_WATCOM │ └─X86_WC16 ├─Start │ ├─Application │ ├─Config │ ├─GUI │ │ ├─AntiAlias │ │ ├─ConvertColor │ │ ├─ConvertMono │ │ ├─Core │ │ ├─Font │ │ ├─LCDDriver │ │ ├─MemDev │ │ ├─MultiLayer │ │ ├─Widget │ │ └─WM │ └─System │ └─Simulation │ ├─Res │ ├─SIM_GUI │ │ └─Branding │ └─WinMain └─Tool

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值