第一部分第二章 体系架构及主要特性
整体结构
如前所述,新控件集使用面向对象编程思想重新设计了
MiniGUI 的控件集,类似 MFC 和 Win32 的关系,也类似 Gtk+ 和 Xlib 的关系。图 p1c2-1 给出了 mGNCS 的基础类及其关系。

图 p1c2-1 mGNCS 中的基础类及其关系
如图所示,
- mObject 是整个 mGNCS 类关系中的最基础类(超类),所有对象从 mObject 派生而来。
- mComponent 是所有组件的基类;组件又分可见组件及不可见组件。可见组件就是我们常说的控件,而不可见组件的典型例子为定时器。mComponent 定义了组件类的基础组成部分,如风格、属性和事件等。
- mWidget 派生自 mComponent,是所有可见组件(即控件)的基类。
- mInvsbComp 派生自 mComponent,是所有不可见组件的基类。
- mWidget 通过聚合一个对应的渲染器(Renderer)接口,增加了渲染器这一新特性。
mGNCS 中,也存在若干直接派生自 mObject 的类,这些类属于通用性类,如用于管理列表型控件的列表项类等等。
总结而言,新控件集中存在如下几种类:
- 控件类。这种类用于表示各种控件(如主窗口、静态框、按钮、列表框等),也就是 MiniGUI 应用程序中具有可视化特征的类。需要注意的是,mGNCS 中所说的“控件”,其概念比 MiniGUI 所述“控件”有更广泛的外延,同时包括了主窗口等对象,而 MiniGUI 所指的控件,仅用于子窗口。在 mGNCS 中,所有控件类都派生自 mWidget 类。
- 非控件类。这种类,用于维护类层次结构以及控件所使用的数据等,包括如下几种:
- 超类,它是 mGNCS 类层次结构中的最基础类,所有其他类由这个类派生而来,即 mObject 类。
- 一般性类,这种类用来实现数据源、数据绑定等机制,也用来维护控件所使用的数据,如 mItem 类。
- 不可见组件类,这种类用来表示界面中所使用的定时器等不可见的组件,和控件类(相当于可见组件类)一起,被统称为组件类。
类层次图
下面给出了 mGNCS 目前主要的类及其层次关系:
- mObject
- mItem
- mComponent
- mInvsbComp
- mWidget
- mStatic
- mLEDLabel
- mImage
- mRect
- mGroupBox
- mButton
- mPanel
- mScrollWidget
- mItemView
- mListView
- mIconView
- mScrollView
- mListbox
- mContainer
- mProgressBar
- mPropSheet
- mSlider
- mSpinner
- mEdit
- mMonthCalendar
面向对象设计带来的好处
面向对象的设计给 mGNCS 带来了如下好处:
- 简化编程,mGNCS 将常用的消息和通知处理抽象成了事件/处理器结构,从而大大简化了编程。
- 规范化的控件风格、属性、事件、方法等,易于 mStudio 等工具处理,从而实现界面设计的可视化。
- 重构的控件类体系结构,对每个控件的功能做单一设计及处理,通过继承实现控件功能的扩展,从而简化了设计,提高了代码的可维护性以及可扩展性。
新控件集的其他主要特性
除了上述特性之外,mGNCS 还具有如下值得一提的特性:
外观渲染器
我们知道,MiniGUI 3.0 新增功能中最为重要的是外观渲染器(Look and Feel Renderer,LFRDR)。外观渲染器为用户提供了多种风格的主窗口和控件界面外观风格。应用程序在这几种风格的窗口界面之间进行切换非常容易,只要在创建窗口时传递不同的渲染器名称,就可以变换出不同风格的界面。
在
MiniGUI 3.0 外观渲染器的基础上,mGNCS 进一步扩展了外观渲染器的概念,新控件集中的每个控件都具有自己的外观渲染器,并按照控件的继承规则定义每个控件专有的渲染器接口,使其能够随着控件的变化而变化。 新控件集为每个控件默认提供了 classic(经典)、fashion(流行)、skin(皮肤)、flat(平板)等四种外观渲染器。控件可以选择任意一种有效的渲染器,通过为该渲染器设置特定的属性(如颜色、尺寸等)来调整控件的外观。为了和控件自身的渲染器相区别,MiniGUI 3.0 定义的渲染器被称为“全局渲染器(global renderer)”,新控件集引入的渲染器称为“控件渲染器(control renderer)”。这两类渲染器的作用有如下不同:
- 全局渲染器作用于主窗口、MiniGUI 固有控件集以及新控件集的系统组件(如边框、标题栏、滚动条等非客户区元素)。
- 控件渲染器仅作用于新控件集各个控件的客户区绘制。
外观渲染器为控件外观的定制,提供了非常方便的实现方式。有关外观渲染器及相关接口的描述和使用,将在本指南
第二部分第三章中做详细介绍。
事件监听机制
mGNCS 提供了一种类似 QT 的 signal 和 slot 的机制,能够把一个对象的事件链接到任意一个对象上。mGNCS 的事件监听链接机制提供了一种将事件发送者和事件关心者解耦的方式。它通过全局数据表,把发送者和接收者的关系对应起来。
在没有事件监听机制的情况下,我们通过编写事件的事件处理器来处理每个事件。有了事件监听机制,我们就可以在程序的任意地方建立事件和监听者之间的联系,从而解耦事件发生者和关心者之间的关系。
数据源及数据绑定
如果读者曾经使用 Visual Studio 开发过基于 MFC 的 C++ 应用程序的话,则一定记得这个工具提供一种机制,可以将对话框中的控件内容和给定的类成员变量绑定起来。在 VC 中,对话框控件的初始化值,可以从绑定的对话框成员变量中自动获得并设置好,而当对话框退出时,控件中的值又可以自动赋值给对应的对话框类成员变量。这就是 mGNCS 提供的数据源和数据绑定功能的思想来源。但是,mGNCS 提供的数据源和数据绑定功能更加强大。利用 mGNCS 的数据绑定功能,当 mGNCS 控件的值发生变化时,我们可以自动更新其他控件,或者将数据再次保存到期望的数据源中;通过 mGNCS 的数据源,我们可以定义不同格式的数据来源,如程序定义的字符串数组、文本文件、配置文件,甚至数据库等等,并使用这些数据自动填充到 mGNCS 控件中。
数据绑定和数据源是 mGNCS 提供给应用程序的两个非常重要的机制,这两个机制均有助于实现程序逻辑和它所处理的数据之间的分离,且便于类似 mStudio 这样的可视化 GUI 设计工具来设计界面。
资源管理
mGNCS 中有一个相对独立的模块,即资源管理模块。这个模块主要配合 mStudio 可视化设计工具使用。这个模块主要完成如下工作:
- 从 mStudio 生成的资源包中装载界面描述数据,并生成对应的主窗口或对话框。
- 装载渲染器、图片、文本等其他界面相关的资源或者描述数据。
使用 mStudio 开发工具的情况下,除了一些常用接口之外,应用程序基本上不需要直接调用资源管理模块的接口。有关资源管理模块接口的描述和使用,将在本指南
第二部分第三章中做详细介绍。
上一章 <
目录 >
下一章
--
KongMing - 02 Sep 2009