MINIGUI 主窗口和控件的理解
GUI的种类及uCGUI的架构

GUI的种类及uCGUI的架构(说明:本博文转载自他人笔下,希望可以帮助同僚更深刻的认识GUI)GUI的种类及uC/GUI的架构一. GUI概述GUI(Graphic User Interface)是图形化的用户界面,它能提供友好的人机交互接口。
它有以下特性:体积小,运行时耗用系统资源少,层次化的结构,易移植,可靠性高嵌入式GUI种类嵌入式GUI种类有很多,下面列举几种:1. WINCE的GWES(图形、窗口、事件子系统),由应用程序接口(API)、用户接口(UI)和图形设备接口(GDI)组成,包含了消息机制2. Trolltech公司的产品:QT、QTE、QTOPIA,它们跨平台、功能强大,但资源消耗多3.MINIGUI是魏永明创建的嵌入式GUI中间件,可以以多线程、多进程、以及单任务运行,是比较成熟的商用系统4.ucGUI能支持多种环境的GUI,可以以多任务形式运行或者以前后台模式运行。
商用化,但功能相对简单GUI的两种模式:1. Windows模式,采用类似windows的API和相应的消息机制,如ucGUI、MicroWindows、miniGUI2.C/S模式,采用一个XServer,所有的显示都以客户端的形式请求服务,如Nano-XGUI在嵌入式系统或实时系统中的地位越来越多的市场需求数据显示,包括PDA、娱乐消费电子、机顶盒、DVD等影音设备、WAP 手机等高端电子产品得到广泛应用,原先仅在军工、工业控制等领域中使用的GUI图形系统,受到越来越多的关注。
对于轻量级 GUI 的系统而言,对 GUI 的要求相对较低,如传统51类型单片机这类系统一般不希望建立在庞大累赘的、非常消耗系统资源的操作系统和 GUI 之上,如 Windows 或 X Window。
目前此类系统都直接使用原有编程手段,采用比较简单的手法实现GUI。
对于太过庞大和臃肿的GUI系统而言,μc/GUI这类可运用于此类资源较紧张的轻型 GUI 的需求更加突出uc/GUI简介μc/GUI是美国Micrium公司出品的一款针对嵌入式系统的优秀图形软件。
MiniGUI 体系结构

MiniGUI 体系结构之二1 引言在任何一个足够复杂的 GUI 系统中,处理窗口之间的互相剪切是其首要解决的问题。
因为多窗口系统首先要确保一个窗口中的绘制输出不会影响到另外一个窗口。
为此,GUI 系统一般要利用 Z 序来管理窗口之间的互相剪切关系。
根据窗口在 Z 序中所处的位置,GUI 系统要计算每个窗口受剪切的区域,即剪切域。
通常,窗口的剪切域定义为互不相交的矩形集合。
GUI 系统的底层图形引擎在进行输出时,要根据当前输出的剪切域进行输出的剪切操作。
从而保证窗口的绘制输出不会互相影响。
因为任何一个窗口的创建、销毁、隐藏、显示均有可能影响其他窗口的剪切域,所以首先要有一个高效的剪切域维护算法。
本文将详细描述MiniGUI 中的剪切域生成算法。
许多人对控件(或者部件)的概念已经相当熟悉了。
控件可以理解为主窗口中的子窗口。
这些子窗口的行为和主窗口一样,即能够接收键盘和鼠标等外部输入,也可以在自己的区域内进行输出�D�D只是它们的所有活动被限制在主窗口中。
MiniGUI 也支持子窗口,并且可以在子窗口中嵌套建立子窗口。
我们将MiniGUI 中的所有子窗口均称为控件。
在 Windows 或 X Window 中,系统会预先定义一些控件类,当利用某个控件类创建控件之后,所有属于这个控件类的控件均会具有相同的行为和显示。
利用这些技术,可以确保一致的人机操作界面,而对程序员来讲,可以像搭积木一样地组建图形用户界面。
MiniGUI 使用了控件类和控件的概念,并且可以方便地对已有控件进行重载,使得其有一些特殊效果。
比如,需要建立一个只允许输入数字的编辑框时,就可以通过重载已有编辑框而实现,而不需要重新编写一个新的控件类。
在多语种环境中,输入法是一个必不可少的模块。
输入法提供了将标准键盘输入翻译为适当语种的文字的能力。
MiniGUI 中也包含有标准的中文简体输入法,包括全拼、五笔和智能拼音等等。
本文最后将介绍 MiniGUI 中的输入法模块实现。
MiniGUI(程序开发)

25
控件风格的介绍
窗口的通用风格: WS_VISIBLE WS_CAPTION WS_BORDER WS_VSCROLL WS_EX_NONE (窗口可见) (窗口有标题) (窗口有边框) (垂直滚动条) (无扩展风格)
26
重要的消息类型
MSG_CREATE:在窗口成功创建后进行触发, 在其中可以进行新窗口的创建。 MSG_COMMAND:控件内部发生事件时, 通过此消息来进行发送。 MSG_CHAR:有按键值,当按键按下时触发此 消息。 MSG_LBUTTONDOWN:鼠标点击左键时出 发此消息。
28
主要的API接口函数
GetDlgItem:根据控件标识符获得控件句柄。
GetWindowText:复制编辑框中的文本。
SetWindowText:重置编辑框中的文本。
SetWindowBkColor:设置窗口背景颜色。
SetWindowAdditionalData:保存对话框的附加数 据
// control class // control style // control position in
// control identifier // control caption // additional data // control extended style
14
对话框的建立
//设置主窗口风格
CreateInfo.dwExStyle = WS_EX_NONE; CreateInfo.spCaption = “HelloWorld”; CreateInfo.hMenu = 0;
//设置主窗口的扩展风格 //设置主窗口的标题 //设置主窗口的主菜单
MinGUI 用 户 手 册

MinGUI 用 户 手 册适用 MinGUI 版本 1.3x 版权所有 © 2006~2010,博芯电子 最新改动日期:2009/12/31目录第一章 MinGUI简介 (4)1.1 GUI发展现状 (4)1.2 MinGUI的由来 (7)1.3 MinGUI资源占用情况 (8)1.4 MinGUI的优势 (8)1.5 MinGUI的市场定位 (8)1.6 MinGUI的解决方案 (9)第二章 MinGUI软件架构 (10)2.1 体系结构 (10)2.2 运行模式 (11)2.3 窗口系统 (13)2.4 消息机制 (14)2.5 回调过程 (20)2.6 字体支持 (21)2.7 显示设备 (21)2.8 输入设备 (21)2.9 输入法 (21)第三章 GDI基础绘图 (22)3.1 基本概念 (23)3.2 绘图函数 (29)第四章 GDI高级绘图 (29)4.1 位图加载 (29)4.2 位图卸载 (29)4.3 位图输出 (30)4.4 透明位图 (31)4.5 位图工具 (31)第五章 GUI设备驱动接口 (34)5.1 显示驱动接口 (34)5.2 键盘驱动接口 (34)5.3 鼠标/触摸驱动接口 (35)5.4 时钟驱动接口 (35)5.5 模拟器驱动及接口 (36)5.6 GUI系统参数配置 (37)第六章 程序开发 (39)6.1 开发环境 (39)6.2 程序样例 (41)6.3 如何实现动画效果 (43)6.4 常用的Windows API (45)第七章 常用控件及组件 (54)7.1 标准窗口控件(“window”) (55)7.2 静态标签(“static”) (55)7.3 按钮(“button”) (56)7.4 组合框(“groupbox”) (56)7.5 单选框(“radiobox”) (57)7.6 复选框(“checkbox”) (58)7.7 列表框(“listbox”) (58)7.8 菜单(“menu”) (59)7.9 进度条(“progressbar”) (60)7.10 数字编辑框(“digiedit”) (61)7.11 数字选择框(“spinedit”) (61)7.12 IP地址编辑框(“ipedit”) (62)7.13 单行文本编辑器(“edit”) (63)7.14 多行文本编辑器(“memo”) (64)7.15 拼音输入法组件 (65)7.16 数字键盘译码 (65)第一章 MinGUI简介图形用户界面(GUI)这一概念是70年代由施乐公司帕洛阿尔托研究中心提出,当时施乐公司帕洛阿尔托研究中心(Xerox PARC)施乐研究机构工作小组最先建构了WIMP(也就是视窗,图标,菜单和点选器/下拉菜单)的范例,并率先在施乐一台实验性的计算机上使用。
飞漫软件及其图形中间件MiniGUI

…
I 聚焦 H D
… … … 一 一 ,
,
中国 自己的电子信息产业正如火如荼地发展着 , 尽管还不能与欧美同行相提并论 , 但我们大家都对它 寄予厚望。而中国 自己的设计公司(D 是我们所有 中国 电子行业人的寄托所在 , IH) 它们代表着中国 自己的 科技水平和创新能力。 自 2 0 0 8年 5月起 , 本刊将新辟栏 目一 IH聚焦 》 共五期 , -D ( ( , 以报道 中国的 IH公司 D
以及其 它 GUI 素, 元 包括菜 单、 加速键 、 插入 符及定时器等
・
支持低端显示 设备 ( 比如 单色 L D) 高端显示 设备 C 和
( 8位色及 以上显示 设备)
・
MCU开发部 门内, 很多时候 都是 由软件工程师而非硬件 工 V P 电话 、 MP 机顶盒、 OI P 、 智能家居、 安防监控 、 医疗设备 、 程师 , 去主导或选用哪家厂商 、 哪个型号 的 MCU及其 它器 电力、 工控及仪表 、 多媒体终端及军事工业等领域 。
件 。他们将综合考虑项 目方案的特 征、 品的特性 、 产 相关 设 计文档 与资料库的丰富程度 、产 品的路线 图及前后 的兼容 性进行选择 。由此 , 软件业 的重要性可见一斑 。
事 , 要 实 现 更 丰 富 的 功 能 , 有 更 强 的 拓 展 性 及 更 高 兼 容 但 具
・
・
・
性, 则并不简单 。图形中间件 的开发既需要很好的架构, 也
・
广泛 的应 用领域
开 放 源 码 , 活 的 授 权 方 式 灵
节, 为此 , 需要专 门的技术 团队或设计公司帮助
・
子 元 器 件 2 0 6 g . cnc 0 8. ecec .om
第21章 MiniGUI图形界面设计

21.1.3 MiniGUI运行模式
21.2 MiniGUI的安装和使用
•
Байду номын сангаас
现有的资料主要介绍了MiniGUI在RedHat9.0下的安装 和配置,而对其他Linux发行版下应用的资料还很少。 本章将介绍MiniGUI在Ubuntu下的安装和配置方法, 以及如何使用eclipse进行MiniGUI的嵌入式开发。
• •
(3)如果没有出现错误,就可以继续执行make和 make install命令编译并安装libminigui库文件: $make
(4)默认情况下,MiniGUi的函数库将安装在 /usr/local/lib目录中。您应该确保该目录已经列在 /etc/ld.so.conf文件中。修改/etc/ld.so.conf文件,如果 该文件不存在则新建一个。将 /usr/local/lib目录添加到 该文件最后一行。
• • • •
21.2.5 交叉编译MiniGUI库
• • • 与编译PC上的libminigui的过程是大致相同的,只需在 make menu出现的配置界面中略做配置即可。 “Development environment options ” 按回车键后进入子菜单,需要配置的项如图21-2所示:
1. system段
•
system段中指定了MiniGUI要使用的图形引擎、输入 引擎以及鼠标设备和协议类型,分别由gal_engine、 ial_engine、mdev和mtype键指定。因为MiniGUI库 中可以同时包含多个图形引擎和多个输入引擎,可以分 别通过gal_engine、ial_engine指定要使用哪个图形引 擎。
21.2.6 交叉编译例程
•
• • • • •
第二次课:MiniGUI程序架构

MiniGUI程序架构 程序架构分析: 程序架构分析:
主窗口创建时消息动作过程: 主窗口创建时消息动作过程:
SendMessage MSG_CREATE CREATEMAINWINDOW SHOWWINDOW
IT Education & Training
GetMessage
WndProc
PostMessage MSG_PAINT
7
MiniGUI程序架构
程序架构分析: 程序架构分析:
IT Education & Training
• 3) 设置主窗口属性 —— ——MAINWINCREATE 结构描述 • CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION; • 设置主窗口风格,这里把窗口设为初始可见的,并具有边框和标题 栏。 • CreateInfo.deExStyle = WS_EX_NONE; • 设置主窗口的扩展风格,该窗口没有扩展风格。 • CreateInfo.spCaption = “HelloWorld” • 设置主窗口的标题为”HelloWorld”。
• 设置主窗口在屏幕上的位置,该窗口左上角位于(0, 0),右下角位 于(320, 240)。
11
MiniGUI程序架构
程序架构分析: 程序架构分析:
• 4) 创建和显示主窗口
• •
IT Education & Training
//创建主窗口
hMainWnd = CreateMainWindow (&CreateInfo);
• 6) 窗口过程函数 • static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
基于MiniGUI的机车显示终端图形用户界面研究

件 , 即 u rlc l 绘 制 窗 口,而 MS _ L E消息 的 s/ a/ o G C OS
lb/ i guir s。 i m ni / e
处 理 则用 来 完成 应 用 的 结 束 。需 要
nGUI i 这 样 ,就 将 说 明 的 是 ,也 可 以在 Mii Man
裁 减 后 的 文 件 移 函 数 中建 立 其它 应 用 线 程 。综合 上 植 到 目标 机上 。 述 过 程 ,得 出主 界 面 设 计 流程 图如
示 终 端 的 图 形 用 数 据 包 括 速 度 、 限 速 、 信 号 机 编 号
户 界 面 主 要 完 成 和 类 型 、距 信 号 机距 离 、 时 间等 ;
数 据 的 显 示 、查
() 新 状 态 指 示 显示 : 括 当 2刷 包
询 和 用 户 输 入 等 前 色 灯 以及 屏 幕 右边 的各 种 状 态 指 功 能 ,在 设 计 上 要 求简单实用 、 2 0 .0 电子 设 计 应 用 w .a .o c 07 1 ww e w c m.n
薯 √ _{ r
。
|
|
j
.
/ confgu e i r
. ..
--
--
ena e ・ tve a bl - i i l na
操 作 方便 。 Mii nGUI 一 种 基 于 线程 的窗 是
.
d s e. t tc i abl . a i s
;
不 支 持 静
;
支 持 本 地 i1 a
tra he d版 本
一
dsbed b g i l—e u a
; 应用 程 在
( 修 改 / r 1 1 et 递 。M ii 2) US / ca / o C/ nGUI 用 消 息 驱 动 作 为应 使
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
return 0;
}
returnDefaultMainWinProc(hWnd, message,wParam,lParam);
}
intMiniGUIMain(intargc, const char*argv[])
{
MSGMsg;
HWNDhMainWnd;
CreateInfo.hMenu= 0;
CreateInfo.hCursor=GetSystemCursor(0);
CreateInfo.hIcon= 0;
CreateInfo.MainWindowProc=HelloWinProc;
CreateInfo.lx= 0;
CreateInfo.ty= 0;
hStaticWnd2 =CreateWindow(CTRL_STATIC,
"This is child static control",
WS_CHILD | SS_NOTIFY | SS_SIMPLE | WS_VISIBLE | WS_BORDER,
IDC_STATIC2,
20, 110, 150, 50, hStaticWnd1, 0);
0, 20, 100, 24, hStaticWnd2, 0);
return 0;
}
/* static voidUnregisterLeabharlann yControl(void){
UnregisterWindowClass(MY_CTRL_NAME);
}*/
staticintHelloWinProc(HWNDhWnd,intmessage, WPARAMwParam, LPARAMlParam)
CreateInfo.rx= 320;
CreateInfo.by= 240;
CreateInfo.iBkColor=COLOR_lightwhite;
CreateInfo.dwAddData= 0;
CreateInfo.hHosting= HWND_DESKTOP;
hMainWnd=CreateMainWindow(&CreateInfo);
20, 20, 80, 20, hStaticWnd1, 0);
hButton2 =CreateWindow(CTRL_BUTTON,
"Button2",
WS_CHILD |BS_PUSHBUTTON | WS_VISIBLE,
IDC_BUTTON2,
20, 50, 80, 20, hStaticWnd1, 0);
//在 hStaticWnd1 中创建一个编辑框控件
hEdit1 =CreateWindow(CTRL_EDIT,
"Edit box 1",
WS_CHILD | WS_VISIBLE | WS_BORDER,
IDC_EDIT1,
20, 80, 100, 24, hStaticWnd1, 0);
//在 hStaticWnd1 中创建一个静态框 hStaticWnd2
* 利用预定义控件类创建控件
**********************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <minigui/common.h>
MAINWINCREATECreateInfo;
CreateInfo.dwStyle= WS_VISIBLE | WS_BORDER | WS_CAPTION;
CreateInfo.dwExStyle= WS_EX_NONE;
CreateInfo.spCaption= "Hello, world";
if (hMainWnd== HWND_INVALID)
return -1;
ShowWindow(hMainWnd, SW_SHOWNORMAL);
while (GetMessage(&Msg,hMainWnd)) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
//在 hStaticWnd2 中创建一个编辑框控件 hEdit2,这时, hEdit2 是 hStaticWnd1 的孙窗口
hEdit2 =CreateWindow(CTRL_EDIT,
"Edit Box 2",
WS_CHILD | WS_VISIBLE | WS_BORDER,
IDC_EDIT2,
{
HWND hStaticWnd1, hStaticWnd2, hButton1, hButton2, hEdit1, hEdit2;
//创建一个静态框
hStaticWnd1 =CreateWindow(CTRL_STATIC,
"This is a static control",
WS_CHILD | SS_NOTIFY | SS_SIMPLE | WS_VISIBLE | WS_BORDER,
*/
#define IDC_STATIC1100
#define IDC_STATIC2150
#define IDC_BUTTON1110
#define IDC_BUTTON2120
#define IDC_EDIT1130
#define IDC_EDIT2140
staticintCreateWindow_s(HWNDhWnd)
MINIGUI 中大体分为 主窗口、控件(即子窗口),而其他的一些都属于这两类,如对话框属于主窗口,按键等属于控件
对于主窗口、控件的理解,根据以下程序和效果图,更容易明白。
/**********************************************************************************
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
/*
CreateWindow(class_name, caption, style, id, x, y, w, h, parent,add_data)
{
switch (message) {
case MSG_CREATE:
CreateWindow_s(hWnd);
return 0;
case MSG_DESTROY:
DestroyAllControls(hWnd);
return 0;
case MSG_CLOSE:
DestroyMainWindow(hWnd);
IDC_STATIC1,
10, 10, 180, 300,hWnd, 0);
//在 hStaticWnd1 中创建两个按钮控件
hButton1 =CreateWindow(CTRL_BUTTON,
"Button1",
WS_CHILD | BS_PUSHBUTTON |WS_VISIBLE,
IDC_BUTTON1,
}
MainWindowThreadCleanup(hMainWnd);
return 0;
}
#ifdef_MGRM_THREADS
#include <minigui/dti.c>
#endif
下图是在Ubuntu中得到的结果: