BBS水木清华站∶精华区

发信人: Kongming (没日没夜...), 信区: Linux        
标  题: MiniGUI 的特色(1) 
发信站: BBS 水木清华站 (Fri Jul  2 15:56:25 1999) 
 
一、概述 
 
    MiniGUI 是 Linux 控制台上运行的,基于 SVGALib 和 LinuxThread  
库的多窗口图形用户界面支持系统。MiniGUI 采用了类 Win32 的 API 接 
口,实现了简化的类 Windows 98 风格的图形用户界面。图形用户界面在 
许多情况下都优于字符界面,其最大的优点是使应用程序的操作简单易学。 
    在 MiniGUI 中,图形用户界面包括如下基本元素: 
 
        |-----主窗口 
        |-------------窗口非客户区 
        |                               |-------------窗口标题 
        |                               |-------------窗口边框 
        |                               |-------------菜单栏 
        |                                
        |-------------窗口客户区 
        |                       |-------------子窗口(窗片或控件) 
        | 
        |-------------对话框 
        |-----------对话框控件 
 
               图 1-1  图形用户界面的基本元素 
 
1.1  窗口 
 
    MiniGUI 中的窗口基本分四类,分别为主窗口、对话框、控件和主窗口 
中的窗片。 
    MiniGUI 中的主窗口和 Windows 应用程序的主窗口概念类似,但略微 
有些不同,MiniGUI 中的每个主窗口对应于一个单独的线程,通过函数调用 
可建立主窗口以及对应的线程。每个线程有一个消息队列,主窗口从这一消 
息队列中获取消息并由窗口过程(回调函数)进行处理。 
    MiniGUI 中的对话框是一种特殊的窗口,对话框一般和控件一起使用, 
这两个概念和 Windows 的相关概念是类似的。MiniGUI 支持的控件类型有: 
      静态框:文本、图标或矩形框等。这种控件的属性一般不会在运 
          行时发生变化。 
      文本框:单行或多行的文本编辑框。 
      按钮:单选钮、复选框和一般按钮等。 
      其他特殊控件。 
    
1.2  消息和消息循环 
 
    在Windows系列操作系统中,广泛使用了消息驱动的概念。在MiniGUI 
中,我们也使用了消息驱动作为应用程序的创建构架。 
    在消息驱动的应用程序中,计算机外设发生的事件,例如键盘键的敲 
击、鼠标键的按击等,都由支持系统收集,将其以事先的约定格式翻译为 
特定的消息。应用程序一般包含有自己的消息队列,系统将消息发送到应 
用程序的消息队列中。应用程序可以建立一个循环,在这个循环中读取消 
息并处理消息,一直处理到特定的消息传来为止。这样的循环称为消息循 
环。一般地,消息由代表消息的一个整型数和消息的附加参数组成。例如, 
鼠标左键的按下消息,可能由133这个数来表示,其附加参数可能包含按下 
时的鼠标所在位置信息。例如,MiniGUI中如下定义消息: 
 
typedef struct 

    HWND             hwnd; 
    int              message; 
    WPARAM           wParam; 
    LPARAM           lParam; 
    ... 
}MSG; 
 
message 指定了特定的消息类型,wParam 是以unsigned int类型定义的 
消息的短参数,lParam 是以 long 类型定义的消息长参数。 
 
    应用程序一般要提供一个处理消息的标准函数。在消息循环中,系统 
可以调用此函数,应用程序在此函数中处理相应消息。 
 
    图 1.2是一个消息驱动的应用程序的简单构架示意。 
 
 
    ------------                                          ------  
    |  外设事件 |           --------------------        /        \ 
    ------------       --->| 主窗口线程消息队列 |----> | 消息循环 | 
         ||           |     --------------------        \        / 
         ||           |                                   ------ 
         \/           |                                     || 
   ---------------    |                                     || 
  |  多窗口管理器 |---                                      \/ 
   ---------------                                      ----------- 
                                                       |  窗口过程 |  
                                                        ----------- 
               图 1.2  消息驱动的应用程序的简单构架 
 
在 MiniGUI 中,消息分为如下几种类型: 
    系统消息,为系统内部管理使用。 
    鼠标消息,鼠标的点击、移动等产生的消息。 
    键盘消息,键盘的按键消息。 
    窗口消息,窗口管理消息。 
    菜单消息,菜单管理消息。 
    命令消息等。 
 
1.3  窗口过程和窗口类 
 
     窗口过程是用来处理窗口消息的函数过程。对于同一类型的控件, 
其窗口过程一般是一样的。因此,系统一般利用窗口的窗口类名来区分 
不同的窗口类并调用不同的窗口过程。由于几乎每一个主窗口均和其他 
窗口有着不同的窗口过程,因此,在 MiniGUI 中,窗口类的概念只存 
在于控件和窗片中。对于主窗口来说,其窗口过程在建立主窗口时指定, 
而对控件和窗片来说,则在注册窗口类时指定,而在建立窗片或控件时 
指定所属窗口类。 
 
1.4  句柄 
 
    句柄是 MiniGUI 用来标识对象的标识符。句柄和指针概念类似,但 
它不一定是指针值。利用句柄,MiniGUI 将系统变量从应用项目中分离了 
出来,因为程序员只能通过句柄访问对象,因而就没有利用指针是可能发 
生的因非法访问而导致的数据不一致问题。 
    在 MiniGUI 中,窗口、控件、设备环境、菜单、图标等均使用句柄 
访问。 
 
-- 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.53.193] 

BBS水木清华站∶精华区