MiniGUI程序设计教程

合集下载

教程系列十--使用mStudio开发MiniGUI应用程序

教程系列十--使用mStudio开发MiniGUI应用程序

天行健,君子以自强不息;地势坤,君子以厚德载物天 嵌 通 途 工 作 室教程系列<十>使用mStudio开发MiniGUI应用程序工作室网址/embedroadBBS/embedroad/bbs金 陵 科 技 学 院信息技术学院天嵌通途工作室教程系列/ EmbedRoad Studio Tutorials Series/embedroad jinwenjie2007@第 2 页 共 11 页天嵌通途工作室是由学生自发组织的半商业性质的团体, 主要由金陵科技学院嵌入式爱好者以及软件工程爱好者组成,使用mStudio开发MiniGUI应用程序mStudio 是飞漫软件推出的面向MiniGUI 开发的一款可视化集成开发环境,基于Eclipse CDT,为开发人员提供所见即所得(WYSIWYG)的界面设计环境,同时,自动生成代码,维护工程框架等。

运行于Windows 版本的mStudio 采用了MinGW 运行环境。

版本与运行环境:FMSoft mStudio 1.0 with MiniGUI-BE V3.0 for Windows 支持操作系统:Windows 2000 / XP / 7操作系统 支持硬件平台:x86一、软件安装1.1 安装C/C++运行环境如果您未安装VS2005的运行环境,请安装vcredist_x86.exe ,也可以在工作室网站上下载:/embedroad/down.asp 。

如果你已经装过VS2005集成开发环境,则这步可以省略。

1.2 安装JRE或者JDK如果您未按照JRE运行环境,请安装Windows版本JRE 。

(jre-6u19-windows-i586.exe)以上两个全部默认路径安装即可。

JRE 的安装目录是:C:\Program Files\Java。

1.3安装mStudio下载网址:/index.php?id=136&L=1。

运行mStudio-1.0-MiniGUI-BE-3.0-MinGW-en.msi ,这个软件免费,一路默认安装即可。

嵌入式Linux开发教程12(MiniGUI图形界面设计)

嵌入式Linux开发教程12(MiniGUI图形界面设计)
第12章 MiniGUI图形界面设计
课程安排
• • • • • • • • •
12.1 Minigui概述 12.2 Minigui的安装和使用 12.3 利用Eclipse编写MiniGUI程序 12.4 MiniGUI的编程基础 12.5 消息循环和窗口过程 12.6 对话框和控件编程 12.7 图形设备接口 12.8 实例--MiniQQ界面设计 12.9 小结
1-2
12.1 MiniGUI概述

MiniGUI最初是为了满足一个工业控制系统的需求而设计和开发 的。这个工业控制系统是清华大学为一台数控机床设计的计算机 数控系统(CNC)。在比较了DOS、Windows 98、Windows NT、Linux等系统之后,该项目组决定选择RT-Linux作为实时 操作系统,以便满足2ms甚至更高的实时性。但是图形用户界面 是一个问题,因为X Window不适合于实时控制系统,并且当时 X Window系统的本地化也不尽人意。因此,项目组决定自己开 发一套图形用户界面支持系统。
1-5
12.2 MiniGUI的安装和使用

现有的资料主要介绍了MiniGUI在RedHat9.0下的安装和配置, 而对其他Linux发行版下应用的资料还很少。本章将介绍 MiniGUI在Ubuntu下的安装和配置方法,以及如何使用eclipse 进行MiniGUI的嵌入式开发。

1-6
12.2.1 安装MiniGUI库
• •
1-11
12.2.6 交叉编译例程

• • • • •
以交叉编译mg-sample-3.0为例,所需的命令如下:
$tar zxvf mg-samples-3.0.12.tar.gz $cd mg-samples-3.0.12 $./configure $export PATH=”/usr/local/arm/3.4.1/bin”:$PATH $make CC=arm-linux-gcc

实验八:MiniGUI应用程序设计实验

实验八:MiniGUI应用程序设计实验

实验八 MiniGUI应用程序设计实验一、实验目的1.了解MiniGUI的基本结构。

2.练习MiniGUI的系统配置和编译安装。

3.交叉编译、在目标板上运行MiniGUI。

4.分析并了解 MiniGUI应用程序hello world。

5.在目标板上运行hello world程序。

二、实验设备和仪器1.计算机2.FS2410P教学实验平台三、实验内容及要求1.MiniGUI的系统配置和编译安装2.分析并了解 MiniGUI应用程序hello world。

3.交叉编译MiniGUI应用程序hello world。

4.在开发板上运行hello world程序。

四、实验原理及步骤1. 实验原理MiniGUI是一种面向嵌入式系统和实时系统的图形用户界面支持系统。

它主要运行于Linux控制台,实际可以运行在任何一种具有线程支持的POSIX兼容系统上。

MiniGUI同时也是国内最早出现的几个自由软件项目之一。

与Microwindows相比,MiniGUI和MicroWindows均为自由软件,只是前者遵循LGPL条款,后者遵循MPL条款。

这两个系统的技术路线也有所不同。

MiniGUI的策略是首先建立在比较成熟的图形引擎之上,比如SVGALib和LibGGI,开发的重点在于窗口系统如图形接口; MicroWindows目前的开发重点则在底层的图形引擎,窗口系统和图形接口方面的功能还比较欠缺。

举个例子来说,MiniGUI 有一套用来支持多字符集和多编码的函数接口,可以支持各种常见的字符集,包括GB、Big5、Unicode等,而MicroWindows在多字符集的支持上尚没有统一接口。

-MiniGUI最初是为了满足一个工业控制系统的需求而设计和开发的。

这个工业控制系统是清华大学为一台数控机床设计的计算机数控系统(CNC)。

在比较了DOS、Windows 98、Windows NT、Linux等系统之后,该项目组决定选择RT-Linux作为实时操作系统,以便满足2ms甚至更高的实时性。

OPEN 第5节 MiniGUI程序设计(1)

OPEN 第5节 MiniGUI程序设计(1)

效率 操作系统支持

差 Linux
Linux/uClin Linux ux, uC/OSII, VxWorks等 X86、ARM、X86、ARM、 MIPS MIPS、 PowerPC 中国大陆、 台湾地区 美国,及国内少 数用户
硬件平台支持
X86
X86、ARM
主要应用区域
欧洲
欧美、韩国
5.3 MiniGUI概述
本机执行环境
• • • • • 内核:2.6.22 桌面:KDE 底层图形接口:framebuffer 调试接口qvfb 1.0 miniGUI版本 1.6
2.Hello miniGUI
• DEMO
程序架构分析:
1) 头文件(前四个为必须)
• • • • • #include #include #include #include #include <minigui/common.h> <minigui/minigui.h> <minigui/gdi.h> <minigui/window.h> <minigui/control.h>
程序架构分析:
主窗口创建时消息动作过程: SendMessage MSG_CREATE CREATEMAINWINDOW SHOWWINDOW GetMessage WndProc
PostMessage MSG_PAINT
MSG_PAI NT
hWnd
程序架构分析:
主窗口销毁时消息动作过程 : 底层事件响应 用户单击关闭按钮
• //显示主窗口

ShowWindow(hMainWnd, SW_SHOWNORMAL);
• 显示窗口在屏幕上。

第05章 MiniGUI菜单编程

第05章 MiniGUI菜单编程
HMENU hmnu; MENUITEMINFO mii; hmnu = CreateMenu(); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING ; mii.state = 0; mii.id = IDM_ABOUT_THIS; (DWORD)"文件 文件..."; mii.typedata= (DWORD)"文件..."; InsertMenuItem(hmnu, 0, TRUE, &mii);
int GUIAPI GetMenuItemInfo (HMENU hmnu, int item, BOOL flag, PMENUITEMINFO pmii); int GUIAPI SetMenuItemInfo (HMENU hmnu, int item, BOOL flag, PMENUITEMINFO pmii);
哈尔滨工业大学华德应用技术学院—计算机应用技术系— 哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
5.1 菜单的创建和操作
5.1.3 操作菜单项属性
应用程序可以通过 GetMenuItemInfo 函数获得 感兴趣的菜单项属性, 感兴趣的菜单项属性,也可以通过 SetMenuItemInfo 函数设置 感兴趣的菜单项属性。原型如下: 感兴趣的菜单项属性。原型如下:
哈尔滨工业大学华德应用技术学院—计算机应用技术系— 哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
5.1 菜单的创建和操作
如果这个菜单项有子菜单, 如果这个菜单项有子菜单,则可通过 设置菜单项的 hsubmenu 变量来指 定菜单项的子菜单句柄( 定菜单项的子菜单句柄(由函数 来创建子菜单句柄) CreatePopupMenu 来创建子菜单句柄)

linux minigui的用法

linux minigui的用法

linuxminigui的用法在Linux中,GUI工具包是一个很重要的库,因为它可以让开发人员更方便地开发图形用户界面应用程序。

尽管有很多不同的图形工具包可用,但是其中最流行的是GTK+。

不过,如果您需要使用另一种库来开发图形应用程序,LinuxMiniGUI可能是一个很好的选择。

它是一个小巧且轻量级的图形用户界面库,专门为Linux系统设计。

这篇文章将向您展示如何使用LinuxMiniGUI开发图形用户界面应用程序。

一、安装LinuxMiniGUI要使用LinuxMiniGUI,您需要首先将其安装到您的Linux系统中。

您可以使用包管理器来安装它。

例如,在Ubuntu上,您可以使用以下命令来安装MiniGUI:```arduinosudoapt-getinstalllibmigui3libmiguitpl1```二、创建简单的GUI应用程序安装完MiniGUI后,您可以使用GTK+工具来创建简单的GUI应用程序。

但是,如果您想要使用MiniGUI本身,您需要编写一些代码来创建窗口、按钮和其他GUI元素。

以下是一个简单的示例代码:```c#include<windows.h>#include<migui/migui.h>intWINAPIWinMain(HINSTANCEhInst,HINSTANCEhPrevInst,LPSTRa rgs,intncmdshow){MigWindow*window=migui_win_create(NULL,"MyWindow","MyWind owTitle",WINDOW_TYPE_NORMAL);MigLayout*layout=migui_lay_create(window,NULL);migui_lay_add(layout,migui_btn_create(window,"MyButton"));migui_win_show(window);while(1){MSGmsg;while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}}return0;}```这段代码创建了一个窗口和一个按钮。

第02章 MiniGUI的安装和使用

第02章 MiniGUI的安装和使用
第2章 MiniGUI的安装和使用
计算机应用技术系
第2章 MiniGUI的安装和使用
2.1 MiniGUI的组成
2.2 建立MiniGUI的PC运行环境
2.3 第一个MiniGUI程序 2.4 MiniGUI编程基础
哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
第2章 MiniGUI的安装和使用
哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
2.1 MiniGUI的组成
资源包

minigui-res-str-1.6.tar.gz。 这是针对MiniGUI-STR 的基本资 源包,其中包含了运行MiniGUISTR 1.6.2 需要的基本字体 (ISO8859-1) 、鼠标光标、图 标和位图等文件,还包括16 点阵 中文简体(GB2312)一款。


1.嵌入式目标系统不具备开发能力
2.Linux嵌入式系统与PC具有相似性

练习MiniGUI程序的编写和调试,熟 悉MiniGUI的配置、编译操作、应用 程序结构和API函数,为在目标产品 上应用MiniGUI打下基础。
哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
2.2 建立MiniGUI的PC运行环境
哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
2.3.2 图形引擎和输入引擎
MiniGUI抽象层的优越性:
图形和输入抽象层的设计,为实现 MiniGUI 跨操作系统、跨硬件平台提供了 非常大的便利。
哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
2.3.2 图形引擎和输入引擎

哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向

第03章 MiniGUI对话框编程

第03章 MiniGUI对话框编程
哈尔滨工业大学华德应用技术学院—计算机应用技术系— 哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
3.1.1 对话框模板结构
对话框标题
控件对象
哈尔滨工业大学华德应用技术学院—计算机应用技术系— 哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
3.1 对话框模板
3.1.2 对话框内控件结构 结构定义参见<minigui/window.h> 结构定义参见<minigui/window.h> 结构示例如下: 结构示例如下:
第3章 MiniGUI对话框编程 MiniGUI对话框编程
计算机应用技术系
第3章 MiniGUI对话框编程 章 对话框编程
对话框编程是一种快速构建用户 界面的技术。 界面的技术。简化了 CreateWindow函数直接创建子窗 CreateWindow函数直接创建子窗 口的复杂工作。 口的复杂工作。通过建立对话框 模板, 模板,就可以建立模态或者非模 态的对话框。 态的对话框。对话框是一类特殊 的主窗口, 的主窗口,这种主窗口只关注与 用户的交互―― ――向用户提供输出 用户的交互――向用户提供输出 信息, 信息,但更多的是用于用户输入 哈尔滨工业大学华德应用技术学院—计算机应用技术系— 哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向 。
第3章 MiniGUI对话框编程 章 对话框编程
3.1 对话框模板 3.2 模态与非模态对话框 3.3 对话框回调函数 3.4 对话框相关宏和函数
哈尔滨工业大学华德应用技术学院—计算机应用技术系— 哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
第3章 MiniGUI对话框编程 章 对话框编程

MiniGUI教程

MiniGUI教程

CreateInfo.dwStyle 窗口风格CreateInfo.spCaption 窗口的标题CreateInfo.dwExStyle 窗口的附加风格CreateInfo.hMenu 附加在窗口上的菜单句柄CreateInfo.hCursor 在窗口中所使用的鼠标光标句柄CreateInfo.hIcon 程序的图标CreateInfo.MainWindowProc 该窗口的消息处理函数指针CreateInfo.lx 窗口左上角相对屏幕的绝对横坐标,以象素点表示CreateInfo.ty 窗口左上角相对屏幕的绝对纵坐标,以象素点表示CreateInfo.rx 窗口右下角相对屏幕的绝对横坐标,以象素点表示CreateInfo.by 窗口右下角相对屏幕的绝对纵坐标,以象素点表示CreateInfo.iBkColor 窗口背景颜色CreateInfo.dwAddData 附带给窗口的一个32 位值CreateInfo.hHosting 窗口消息队列的托管窗口MiniGUI中控件类的定义如下:控件类的主要元素如下:⏹类名spClassName:区别于其它控件类的类名称⏹窗口过程函数指针WinProc:该类控件的实例均使用该窗口过程函数,它处理所有发送到控件的消息并定义控件的行为和特征⏹类风格dwStyle:定义窗口的外观和行为等的风格,该类的所有实例将具有该普通风格。

⏹扩展的类风格dwExStyle:定义窗口的扩展风格,该类的所有实例将具有该扩展风格。

⏹类光标hCursor:定义该类窗口中光标的形状⏹背景色iBkColor:定义该类窗口的背景颜色象素值⏹类的私有附加数据dwAddData:系统为该类保留的附加空间MiniGUI中控件类操作的相关函数如下:该函数注册一个控件类。

该函数注销一个控件类。

该函数获取指定控件的类名。

.该函数获取指定控件类的类信息。

该函数设置指定控件类的类信息。

MiniGUI-Lite 为应用程序使用GB2312 输入法提供了如下的函数:该函数创建一个GB2312 的输入法窗口。

miniGUI指南

miniGUI指南

图形用户界面支持系统MiniGUI 应用程序开发指南及程序员参考大全魏永明二〇一三年六月二十七日目录目录 (1)序言 (3)第一章基本概念 (5)1.1 有关图形用户界面 (5)1.2 图形用户界面的基本元素 (5)1.3 消息驱动的应用程序 (6)第二章主GUI界面管理 (8)2.1 关于主GUI界面 (8)2.2 定义主GUI界面的基本要素 (8)2.3 主GUI界面的建立 (8)2.4 建立消息循环 (9)2.5 消息回调函数结构 (10)2.6 终止主GUI界面 (11)2.7 资源定义和初始化 (11)2.8 消息框 (13)第三章对话框处理 (15)3.1 有关对话框 (15)3.2 有关控制 (15)3.3 对话框定义 (16)3.4 对话框回调函数 (18)3.5 显示对话框 (20)3.6 系统对话框 (21)第四章窗片管理 (22)4.1 有关窗片 (22)4.2 创建窗片 (22)4.3 绘制窗片 (24)4.4 窗片的析构 (24)4.5 用来输出文本的、可竖直滚动的窗片 (24)第五章图形输出 (25)5.1 颜色 (25)5.2 输出汉字 (25)5.3 设置图形输出的剪切区域 (26)5.4 其他函数 (26)第六章宏、消息、结构和资源定义 (28)6.1 预定义类型 (28)6.2 宏定义 (29)6.3 主GUI界面消息 (30)6.4 对话框动作 (32)6.5 结构 (33)6.4 资源定义 (40)6.4.1 菜单 (40)6.4.2 加速键 (40)6.4.3 对话框及对话框控制 (41)第七章分类函数 (43)7.1 初始化和终止函数 (43)7.2 主GUI界面管理 (43)7.3 主GUI界面消息管理 (45)7.4 菜单管理 (47)7.5 状态栏函数 (49)7.6 窗片管理 (49)7.7 消息框函数 (53)7.8 对话框管理 (54)7.9 控制管理 (55)7.10 文字和图形输出函数 (59)7.11 其他 (62)附录索引 (63)序言MiniGUI是清华大学精仪系研究生魏永明研制开发的适用于MS-DOS环境的图形用户界面支持系统(Graphics User Interface Support System.),提供了应用程序的开发接口。

MiniGUI 编程指南说明书

MiniGUI 编程指南说明书
本指南详细讲述了利用 MiniGUI 开发嵌入式应用软件的基础知识、技术资料和开发技 巧,内容涉及到 MiniGUI 编程的各个方面,包括消息循环和窗口过程、对话框和控件、图 形接口等。有关 MiniGUI 应用编程接口的详细描述,敬请参考《MiniGUI API Reference Manual》。
MiniGUI 编 程 指 南
目录
简 介 ..................................................................................................................... I 版权声明 ....................................................................................................................II 目 录 .................................................................................................................. III 1 前言........................................................................................................................ 1
2.2 一个简单的 MiniGUI 程序 ............................................................................................ 4

MINIGUI学习方法

MINIGUI学习方法

最近在学习minigui,将一些分析的结果贴出来供大家参考,同时欢迎大家的指正。

图形编程中,窗口是一个重要的概念,窗口其实是一个矩形框,应用程序可以使用其从而达到输出结果和接受用户输入的效果。

窗口系统(window system)界于操作系统层次之上,它是一个软件系统,负责把显示屏幕分隔为不同的部分来帮助用户管理和控制不同的显示环境,它提供基于窗口的工作模式。

在linux上面,x就是一个典型的窗口系统吧。

在minigui中有三种窗口类型:主窗口,对话框和控件窗口。

主窗口作为应用程序的主界面或开始界面。

子窗口通常是控件窗口,也可以是自定义窗口类,这里的控件窗口说白了就是一些窗口上面的控件,比如按钮,编辑框等。

对话框其实就是主窗口,只不过一般为了完成特殊用途,所以在此加以区分。

下面我们一起来看看这三种窗口类型的创建吧。

首先看createmainwindow函数,它创建一个主窗口:由于代码比较长,这里就不全部贴出了,主要是说说关键的部分。

createmainwindow函数通过接受pmainwincreate类型的参数而创建一个窗口,并返回其句柄。

关于pmainwincreate结构的具体成员变量,大家可以去查看源码。

下面主要对函数内部做个简单介绍。

1. 声明一个pmainwin类型,并分配空间,该变量用来存放创建的主窗口的信息2. 说下面的代码之前,先说说托管(hosting)窗口和被托管(hosted)窗口吧。

我们知道 minigui内部实现了消息机制,即当有键盘输入事件发生时,就往消息队列中发送键盘消息,而一般是主窗口会不停的从消息队列中取出消息来处理,或者自己响应,或者忽略,或者派发给其他的窗口。

那么这里就有一个问题,消息队列是每个主窗口都有一个呢,还是所有的主窗口都使用同一个消息队列?在minigui中有个特殊的主窗口hwnd_desktop,它是所有窗口的父窗口,直观的说就是整个桌面的窗口。

MiniGUI利用触摸屏实现屏幕键盘驱动输入法的设计

MiniGUI利用触摸屏实现屏幕键盘驱动输入法的设计

MiniGUI利用触摸屏实现屏幕键盘驱动输入法的设计MiniGUI利用触摸屏实现屏幕键盘驱动输入法的设计思想:1、利用MiniGUI的coolbar控件来创建一个屏幕键盘的外观;其代码以后会贴上;#include "common.h"#define ITEM_NUM1 14 /* coolbar */#define ITEM_NUM2 14 /* coolbar */#define ITEM_NUM3 12 /* coolbar */#define ITEM_NUM4 12 /* coolbar */#define ITEM_NUM5 8 /* coolbar */#define IDC_NovaSKB1 1001 /* ime */#define IDC_NovaSKB2 1002 /* ime */#define IDC_NovaSKB3 1003 /* ime */#define IDC_NovaSKB4 1004 /* ime */#define IDC_NovaSKB5 1005 /* ime */#define HEIGHT_SKB 115 /* 软键盘 */#define WIDTH_SKB 240 /* 软键盘 */static const char* caption1[] ={" ` ", " 1 ", " 2 ", " 3 ", " 4 ", " 5 "," 6 ", " 7 ", " 8 ", " 9 ", " 0 ", " - ", " = ", " <- "};static const int SCANCODE1[] ={SCANCODE_GRAVE, SCANCODE_1, SCANCODE_2, SCANCODE_3, SCANCODE_4,SCANCODE_5, SCANCODE_6, SCANCODE_7, SCANCODE_8, SCANCODE_9,SCANCODE_0, SCANCODE_MINUS, SCANCODE_EQUAL,SCANCODE_BACKSPACE};static const char* caption2[] ={"Tab", " q ", " w ", " e ", " r ", " t "," y ", " u ", " i ", " o ", " p ", " [ ", " ] ", " \\ "};static const int SCANCODE2[] ={SCANCODE_TAB, SCANCODE_Q, SCANCODE_W, SCANCODE_E, SCANCODE_R,SCANCODE_T, SCANCODE_Y, SCANCODE_U, SCANCODE_I, SCANCODE_O,SCANCODE_P, SCANCODE_BRACKET_LEFT, SCANCODE_BRACKET_RIGHT, SCANCODE_BACKSLASH };static const char* caption3[] ={"Shift ", " a ", " s ", " d ", " f ", " g "," h ", " j ", " k ", " l ", " ; ", " ' "};static const int SCANCODE3[] ={SCANCODE_LEFTSHIFT, SCANCODE_A, SCANCODE_S, SCANCODE_D, SCANCODE_F,SCANCODE_G, SCANCODE_H, SCANCODE_J, SCANCODE_K, SCANCODE_L,SCANCODE_SEMICOLON, SCANCODE_APOSTROPHE};static const char* caption4[] ={"Ctrl ", " z ", " x ", " c ", " v ", " b "," n ", " m ", " , ", " . ", " / ", " Enter "};static const int SCANCODE4[] ={SCANCODE_LEFTCONTROL, SCANCODE_Z, SCANCODE_X, SCANCODE_C, SCANCODE_V,SCANCODE_B, SCANCODE_N, SCANCODE_M, SCANCODE_COMMA, SCANCODE_PERIOD,SCANCODE_SLASH, SCANCODE_ENTER};static const char* caption5[] ={"Del ", " 英 ", " 中 ", " Space "," | ", " | ", " -> ", " <- "};static const int SCANCODE5[] ={SCANCODE_REMOVE, -1, -1, SCANCODE_SPACE, SCANCODE_CURSORBLOCKDOWN,SCANCODE_CURSORBLOCKUP,SCANCODE_CURSORBLOCKLEFT,SCANCODE_CURSORBLOCKRIGHT};static void create_novaskb1 (HWND hWnd){HWND cb;COOLBARITEMINFO item;int i;static BITMAP del_bmp;if (LoadBitmap (HDC_SCREEN, &del_bmp, "./little/del.bmp") != ERR_BMP_OK)exit(1);cb = CreateWindow (CTRL_COOLBAR,"",WS_CHILD | WS_VISIBLE | WS_BORDER,IDC_NovaSKB1,0, 0, 240, 20,hWnd,0);item.ItemType = TYPE_TEXTITEM;item.Bmp = NULL;item.dwAddData = 0;for (i = 0; i < ITEM_NUM1-1; i++) {item.insPos = i;item.id = i;item.Caption = caption1[i];item.ItemHint = NULL;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item);}/* del 按键 */item.insPos = i;item.id = i;item.ItemType = TYPE_BMPITEM;item.Bmp = &del_bmp;item.ItemHint = NULL;item.Caption = NULL;item.dwAddData= 0;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item); }static void create_novaskb2 (HWND hWnd){HWND cb;COOLBARITEMINFO item;int i;cb = CreateWindow (CTRL_COOLBAR,"",WS_CHILD | WS_VISIBLE | WS_BORDER,IDC_NovaSKB2,0, 22, 240, 20,hWnd,0);item.ItemType = TYPE_TEXTITEM;item.Bmp = NULL;item.dwAddData = 0;for (i = 0; i < ITEM_NUM2; i++) {item.insPos = i;item.id = i;item.Caption = caption2[i];item.ItemHint = NULL;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item); }}static void create_novaskb3 (HWND hWnd){HWND cb;COOLBARITEMINFO item;int i;cb = CreateWindow (CTRL_COOLBAR,"",WS_CHILD | WS_VISIBLE | WS_BORDER,IDC_NovaSKB3,0, 44, 240, 20,hWnd,0);item.ItemType = TYPE_TEXTITEM;item.Bmp = NULL;item.dwAddData = 0;for (i = 0; i < ITEM_NUM3; i++) {item.insPos = i;item.id = i;item.Caption = caption3[i];item.ItemHint = NULL;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item); }}static void create_novaskb4 (HWND hWnd){HWND cb;COOLBARITEMINFO item;int i;cb = CreateWindow (CTRL_COOLBAR,"",WS_CHILD | WS_VISIBLE | WS_BORDER,IDC_NovaSKB4,0, 66, 240, 20,hWnd,0);item.ItemType = TYPE_TEXTITEM;item.Bmp = NULL;item.dwAddData = 0;for (i = 0; i < ITEM_NUM4; i++) {item.insPos = i;item.id = i;item.Caption = caption4[i];item.ItemHint = NULL;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item);}}static void create_novaskb5 (HWND hWnd){HWND cb;COOLBARITEMINFO item;int i;static BITMAP down_bmp;static BITMAP up_bmp;static BITMAP left_bmp;static BITMAP right_bmp;if (LoadBitmap (HDC_SCREEN, &down_bmp, "./little/down.bmp") != ERR_BMP_OK)exit(1);if (LoadBitmap (HDC_SCREEN, &up_bmp, "./little/up.bmp") != ERR_BMP_OK)exit(1);if (LoadBitmap (HDC_SCREEN, &left_bmp, "./little/left.bmp") != ERR_BMP_OK)exit(1);if (LoadBitmap (HDC_SCREEN, &right_bmp,"./little/right.bmp") != ERR_BMP_OK)exit(1);cb = CreateWindow (CTRL_COOLBAR,"",WS_CHILD | WS_VISIBLE | WS_BORDER,IDC_NovaSKB5,0, 88, 240, 20,hWnd,0);item.ItemType = TYPE_TEXTITEM;item.Bmp = NULL;item.dwAddData = 0;for (i = 0; i < ITEM_NUM5 - 4; i++) {item.insPos = i;item.id = i;item.Caption = caption5[i];item.ItemHint = NULL;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item);}#if 1/* down 按键 */item.insPos = i;item.id = i;item.ItemType = TYPE_BMPITEM;item.Bmp = &down_bmp;item.ItemHint = NULL;item.Caption = NULL;item.dwAddData= 0;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item);/* up 按键 */i++;item.insPos = i;item.id = i;item.ItemType = TYPE_BMPITEM;item.Bmp = &up_bmp;item.ItemHint = NULL;item.Caption = NULL;item.dwAddData= 0;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item); /* left 按键 */i++;item.insPos = i;item.id = i;item.ItemType = TYPE_BMPITEM;item.Bmp = &left_bmp;item.ItemHint = NULL;item.Caption = NULL;item.dwAddData= 0;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item); /* right 按键 */i++;item.insPos = i;item.id = i;item.ItemType = TYPE_BMPITEM;item.Bmp = &right_bmp;item.ItemHint = NULL;item.Caption = NULL;item.dwAddData= 0;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item);#endif}static int NovaSKBProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam){switch (message){case MSG_CREATE:create_novaskb1(hWnd);create_novaskb2(hWnd);create_novaskb3(hWnd);create_novaskb4(hWnd);create_novaskb5(hWnd);break;case MSG_COMMAND:{int id = LOWORD (wParam);int code = HIWORD (wParam);switch (id){case IDC_NovaSKB1:SendMessage (hIMEWnd, MSG_KEYDOWN, SCANCODE1[code], 0);break;case IDC_NovaSKB2:SendMessage (hIMEWnd, MSG_KEYDOWN, SCANCODE2[code], 0);break;case IDC_NovaSKB3:SendMessage (hIMEWnd, MSG_KEYDOWN, SCANCODE3[code], 0);break;case IDC_NovaSKB4:SendMessage (hIMEWnd, MSG_KEYDOWN, SCANCODE4[code], 0);break;case IDC_NovaSKB5:if (code == 1){/* 英文 */SetIMEStatus(IS_ENABLE, 0);/* 刷新输入窗口 */ShowWindow(hIMEWnd, SW_HIDE);ShowWindow(hIMEWnd, SW_SHOWNORMAL);}else if (code == 2){/* 中文 */SetIMEStatus(IS_ENABLE, 1);/* 刷新输入窗口 */ShowWindow(hIMEWnd, SW_HIDE);ShowWindow(hIMEWnd, SW_SHOWNORMAL);}else{SendMessage (hIMEWnd, MSG_KEYDOWN, SCANCODE5[code], 0);// Send2ActiveClient (MSG_KEYDOWN, SCANCODE_CURSORDOWN, 0);// Send2ActiveClient (MSG_KEYUP, SCANCODE_CURSORDOWN, 0);}break;}}break;case MSG_KEYDOWN:Send2ActiveClient (MSG_KEYDOWN, wParam, lParam);break;case MSG_DESTROY:DestroyAllControls (hWnd);return 0;case MSG_CLOSE:DestroyMainWindow (hWnd);PostQuitMessage (hWnd);return 0;}return DefaultMainWinProc(hWnd, message, wParam, lParam);}static void InitNovaSKBCreateInfo (PMAINWINCREATE pCreateInfo, int x, int y){pCreateInfo->dwStyle = WS_ABSSCRPOS | WS_BORDER | WS_VISIBLE;pCreateInfo->dwExStyle = WS_EX_TOOLWINDOW;pCreateInfo->spCaption = "NovaSKB" ;pCreateInfo->hMenu = 0;pCreateInfo->hCursor = GetSystemCursor(IDC_ARROW);pCreateInfo->hIcon = 0;pCreateInfo->MainWindowProc = NovaSKBProc;pCreateInfo->lx = x;pCreateInfo->ty = y;pCreateInfo->rx = x + WIDTH_SKB;pCreateInfo->by = y + HEIGHT_SKB;pCreateInfo->iBkColor = PIXEL_lightwhite ;pCreateInfo->dwAddData = 0;pCreateInfo->hHosting = HWND_DESKTOP;}HWND NovaSKBWindow(HWND hosting, int x, int y){HWND hwnd_novaskb;MAINWINCREATE CreateInfo;InitNovaSKBCreateInfo(&CreateInfo, x, y);CreateInfo.hHosting = hosting;hwnd_novaskb = CreateMainWindow (&CreateInfo);if (hwnd_novaskb == HWND_INVALID)return -1;ShowWindow(hwnd_novaskb, SW_HIDE);return hwnd_novaskb;}//不要认为这段代码可以直接编译通过,但没有思想上的和语法上的错误;次程序只是位了说明一下思想,//要是真想学,琢磨下,我以后在贴上测试过的代码;2、在MSG_CREATE消息中利用GBIMEWindow来创建一个IME 窗口;3、在coolbar的proc中用SendMessage(hIMEWnd,MSG_KEYDOWN,SCANCODE,0)来向IME窗口发送模拟键盘的消息;4、IME接收到MSG_KEYDOWN后会把此消息当做键盘消息来做;进而屏幕键盘实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2011-12-27
2011年12月27日星期二
Neusoft Institute of Information
MiniGUI V1.6.x 的主要特征(3/4):
• 11) 汉字(GB2312)输入法支持。 汉字(GB2312)输入法支持。 • 12) 针对嵌入式系统的特殊支持,包括一般性的 I/O 流 针对嵌入式系统的特殊支持, 操作,字节序相关函数等。 操作,字节序相关函数等。 • 13) 层的支持。 (MiniGUI-Lite 版本)。 层的支持。 (MiniGUI版本) • 14) 提供快速和增强的位块操作,视频加速支持以及 提供快速和增强的位块操作, 混合等功能。 Alpha 混合等功能。
Neusoft Institute of Information
MiniGUI 可配置和可定制 性 系统资源消耗 好,大量编 译配置选项 小
MicroWindows 一般 较大( 较大(基于 UNIX套接字, 套接字, 套接字 进程间通讯) 进程间通讯) 较差
OpenGUI 差 最小( 最小(不支持 多进程) 多进程) 最好 Dos、Linux、 、 、 QNX
4.1嵌入式 嵌入式GUI概述 嵌入式 概述 4.2常用嵌入式 常用嵌入式GUI介绍 介绍 常用嵌入式 4.3MiniGUI概述 概述 4.4MiniGUI的编译和安装 的编译和安装 4.5MiniGUI程序框架 程序框架 4.6MiniGUI编程基础 编程基础
2011-12-27
2011年12月27日星期二
2011年12月27日星期二
Neusoft Institute of Information
嵌入式系统导论
大连东软信息学院 嵌入式系统导论课程组
2011-12-27
2011年12月27日星期二
Neusoft Institute of Information
第4章 MiniGUI程序设计
1 2 3 4 5 6
QT/Embedded 差 最大(C++) C++
效率 操作系统支持

差 Linux
Linux/uClin Linux ux, , uC/OSII, , VxWorks等 等 X86、ARM、X86、ARM、 、 、 、 、 MIPS MIPS、 、 PowerPC 中国大陆、 台湾地区 美国, 美国,及国内少 数用户
2011-12-27
2011年12月27日星期二
Neusoft Institute of Information
FrameBuffer
• 修改/boot/grub/menu.lst 文件,kernel 打头的一行添加 修改/boot/grub/menu.lst 文件, vga=0x0317 • 1024*768*16bpp • 必须重新启动才能生效 • Linux 引导时,会在屏幕的左上方显示一个可爱的小企鹅或者发 引导时, 行版厂商的 LOGO 图片
硬件平台支持
X86
X86、ARM 、
主要应用区域
欧洲
欧美、韩国
2011-12-27
2011年12月27日星期二
Neusoft Institute of Information
第4章 MiniGUI程序设计
1 2 3 4 5 6
4.1嵌入式 嵌入式GUI概述 嵌入式 概述 4.2常用嵌入式 常用嵌入式GUI介绍 介绍 常用嵌入式 4.3MiniGUI概述 概述 4.4MiniGUI的编译和安装 的编译和安装 4.5MiniGUI程序框架 程序框架 4.6MiniGUI编程基础 编程基础
Neusoft Institute of Information
4.1嵌入式GUI概述
GUI(Graphics User Interface),图形用户界面,借助菜单、 按钮等标准界面元素和鼠标进行操作,帮助用户方便地向计算 机系统发出指令,并将系统运行的结果同样以图形方式显示给 用户。 嵌入式GUI:轻型、占用资源少、高性能、高可靠性、可配置
2011-12-27
2011年12月27日星期二
Neusoft Institute of Information
4.3 MiniGUI概述
• MiniGUI()原是由魏永明主持 MiniGUI() 和开发的一个自由软件项目, 和开发的一个自由软件项目,现由北京飞漫软件技术有 限公司维护并开展后续开发。 限公司维护并开展后续开发。 • 遵循GPL 条款 遵循GPL • 支持操作系统Linux、uClinux、VxWorks、eCos、uC/OS支持操作系统Linux、uClinux、VxWorks、eCos、uC/OSLinux II、pSOS、 II、pSOS、ThreadX 等 • MiniGUI 为应用程序定义了一组轻量级的窗口和图形设 备接口。 备接口。
2011-1usoft Institute of Information
4.4 MiniGUI编译安装
获取MiniGUI:
• 北京飞漫软件技术有限公司 • MiniGUI 免费版
2011-12-27
2011年12月27日星期二
Neusoft Institute of Information
2011-12-27
2011年12月27日星期二
Neusoft Institute of Information
MiniGUI V1.6.x 的主要特征(1/4):
• 1) 提供了完备的 提供了完备的多窗口机制和消息传递机制。 。 • 2) 提供常用的 提供常用的控件类。 。 • 3) 对话框和消息框支持。 对话框和消息框支持。 • 4) 其它 GUI 元素,包括菜单、加速键、插入符、定时 器等。 等 • 5) 界面皮肤支持。 界面皮肤支持。
2011-12-27
2011年12月27日星期二
Neusoft Institute of Information
MiniGUI 优势:
• 轻型、占用资源少 轻型、 • 高性能 • 高可靠性 • 可伸缩性强 • 跨操作系统支持 • 可配置
2011-12-27
2011年12月27日星期二
Neusoft Institute of Information
2011-12-27
2011年12月27日星期二
Neusoft Institute of Information
MiniGUI函数库组成
• libminigui:核心库,标准控件 libminigui:核心库, • libmgext :扩展库,一些有用的控件 扩展库, • libvcongui:虚拟控制台窗口 libvcongui:
MiniGUI 典型应用
• 工控仪表
2011-12-27
2011年12月27日星期二
Neusoft Institute of Information
MiniGUI 典型应用
• 其他
2011-12-27
2011年12月27日星期二
Neusoft Institute of Information
MiniGUI 参考手册:
源代码及资源包
• libminigui-1.6.x.tar.gz:MiniGUI 函数库源代码,其 libminigui-1.6.x.tar.gz: 函数库源代码, 中包括libminigui libminigui、 libvcongui。 中包括libminigui、libmgext 和 libvcongui。 • minigui-res-1.6.tar.gz:MiniGUI 所使用的资源, 包 minigui-res-1.6.tar.gz: 所使用的资源, 括基本字体、图标、位图和鼠标光标。 括基本字体、图标、位图和鼠标光标。 • mde-1.6.x.tar.gz:MiniGUI 的综合演示程序。 的综合演示程序。 mde-1.6.x.tar.gz: • mg-smaples-1.6.x.tar.gz:《MiniGUI 编程指南》的配 mg-smaples-1.6.x.tar.gz:《MiniGUI 编程指南》 :《 套示例程序。 套示例程序。
2011-12-27
2011年12月27日星期二
Neusoft Institute of Information
MiniGUI运行模式
• MiniGUI-Threads MiniGUI• MiniGUI-Lite MiniGUI• MiniGUI-Standalone MiniGUI• 注意: 注意: –以下讲述基于MiniGUI1.6; –MiniGUI 2.0.x 中Lite模式升级为Processes 模式。 –默认模式是MiniGUI-Threads。
2011-12-27
2011年12月27日星期二
Neusoft Institute of Information
MiniGUI图形引擎
• 基于 基于VESA FrameBuffer的图形引擎。 的图形引擎。 的图形引擎 • 支持 FrameBuffer的Linux内核相关选项: FrameBuffer的Linux内核相关选项: 内核相关选项
2011-12-27
2011年12月27日星期二
Neusoft Institute of Information
4.2 常用嵌入式GUI介绍
• MicroWindows • MiniGUI • 其他图形平台:Qt/Embedded等 其他图形平台:Qt/Embedded等
2011-12-27
2011年12月27日星期二
• 《MiniGUI编程指南》 V1.6 MiniGUI编程指南》 编程指南 • 《MiniGUI API Reference Manual》 V1.6 Manual》
• 其他资源 – –/api_ref/1.6.10/globals_ /api_ref/1.6.10/globals_ 0x64.html#index_d
相关文档
最新文档