学习MiniGui之窗口创建篇

合集下载

MiniGUI模拟环境的建立

MiniGUI模拟环境的建立

MiniGUI模拟环境
的建立
大连理工大学软件学院嵌入式系统工程系
赖晓晨
新建目录、拷贝文件、解压缩
拷贝这些源码包到linux目录下
注意这些项都要有
当前目录下多了好多库文件
资源文件,共五个文件夹
多了好多头文件
添加库路径
使库路径生效
编辑minigui的配置文件
确保如下几处的值
安装qvfb
安装前没有这个文件
编译qvfb结束,开始安装
安装后有这个文件
安装例程
编译例程
生成了可执行文件
修改~/.bashrc文件,增加最后一行,路径配置
接下来就可以运行qvfb了,后台运行
弹出模拟画面
配置一下,直接回车
窗口变为配置的规格
运行某个程序
可以看到程序运行在图形界面上
关闭程序时要右键点击,选择结束会话,然后关闭图形界面。

教程系列十--使用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 ,这个软件免费,一路默认安装即可。

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;
//设置主窗口的扩展风格 //设置主窗口的标题 //设置主窗口的主菜单

MiniGUI图形界面实验

MiniGUI图形界面实验

学习移植 MiniGUI-STR(for uC/OS-II)软件到 SmartARM2200 开发板的基本方法,然后 编写一个简单的 MiniGUI 应用程序,使用 MessageBox 函数创建一个消息框,消息框中显示 字符串“Hello MiniGUI!” 。 4. 实验预习要求 (1) 仔细阅读<<ARM 嵌入式系统实验教程(二)>>第 1 章的内容,了解 SmartARM2200 开发板的硬件结构,注意 TFT 液晶接口电路和键盘电路。 (2) 阅读 MiniGUI 的文档 <<MiniGUI 用户手册 >> 和 <<MiniGUI 编程指南 >> ,了解 MiniGUI 的基本特点和应用配置选项,以及应用程序的编写。 5. 实验原理 (1) MiniGUI 简介 MiniGUI 项目的最初目标是为基于 Linux 的实时嵌入式操作系统提供一个轻量级的图形 用户界面支持系统,发展到今天,MiniGUI 已进入成熟和稳定阶段,并且所支持的操作系统 已不仅仅限于 Linux,它还可以在 uClinux、uC/OS-II、eCos、VxWorks 等系统上运行。 MiniGUI 为应用程序定义了一组轻量级的窗口和图形设备接口, 利用这些接口, 每个应 用程序可以建立多个主窗口,然后在这些主窗口中创建按钮、编辑框等控制。MiniGUI 还为 用户提供了丰富的图形功能,以显示各种格式的位图并在窗口中绘制复杂图形。 MiniGUI 和嵌入式操作系统的关系如图 1.1 所示,基于 MiniGUI 的应用程序一般通过 ANSI C 库以及 MiniGUI 自身提供的 API 来实现自己的功能。
4
广州周立功单片机发展有限公司 }
Tel: (020)38730976

MiniGUI入门

MiniGUI入门
一、 minigui安装所需的资源 minigui安装所需的资源包括: minigui-res-1.6.10.tar.gz:
基本字体、图标、位图和鼠标光标
libminigui-1.6.10.tar.gz:库 mg-samples-2.0.4:示例程序 qvfb-1.0.tar.gz

二、具体安装步骤 1、 首先把需要的文件拷贝到要安装minigui的

配置好后输入“make”命令编译库文件,如下图所示: (此过程需要一段时间)

编译好库文件后输入“make install”命令,安装库文 件,如下图所示:

默认情况下,minigui的函数库将安装在 “/usr/local/lib”目录中,应确保该目录已经列在 “/etc/ld.so.conf”文件中。修改“/etc/ld.so.conf”文 件,命令为: vi /etc/ld.so.conf,如下图所示:
common.h 包括MiniGUI常用的宏以及数据类型的定 义。 minigui.h 包含了全局的和通用的接口函数以及某些 杂项函数的定义。 gdi.h 包含了 MiniGUI 绘图函数的接口定义。 window.h 包含了窗口有关的宏、数据类型、数据结
构定义以及函数接口声明。
Main函数

int MiniGUIMain (int argc, const char* argv[]) MiniGUI主函数名,相当于C语言的main函数 argc:命令行参数个数 argv:参数字符串数组指针

while (GetMessage(&Msg, hMainWnd)) { TranslateMessage(&Msg); DispatchMessage(&Msg); }

第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;}```这段代码创建了一个窗口和一个按钮。

MiniGUI 编程模型(二)

MiniGUI 编程模型(二)

一、对话框
在 MiniGUI 中,对话框是一类特殊的主窗口, 这种主窗口只关注与用户的交互――向 用户提供输出信息,但更多的是用于用户输入。 对话框可以理解为子类化之后的主窗口类。 它针对对话框的特殊性(即用户交互)进行了 特殊设计。
1、对话框模板
在 MiniGUI 中,用两个结构来表示对话框模板 (minigui/window.h),详见PDF文档: 结构 CTRLDATA 用来定义控件,DLGTEMPLATE 用来 定义对话框本身。在程序中,分两步来做: (1)首先利用 CTRLDATA 定义对话框中所有的控件, 并用数组表示。控件在该数组中的顺序,也就是对话框 中用户按 TAB 键时的控件切换顺序。 (2)然后定义对话框,指定对话框中的控件数目,并指 定 DLGTEMPLATE 结构中的 controls 指针指向定义控件 的数组。
HWND GUIAPI CreatWindowEx (const char *spClassName,const char *spCaption,DWORD dwstyle,DWORD dwExstyle, Int id,int x,int,y,int w,int h,HWND hParentWnd,DWORD dwAddData);
如前所述,控件是和用户交互的主角。当控件 上发生了某种时间时,控件将会想其父窗口 发送一条消息来通知所发生的事件,这里的 父窗口既可以是主窗口,也可以是父控件。 但是通常来说应该将控件的父窗口设为主窗 口,因为消息队列通常是由主窗口的窗口过 程处理的。 实际上MiniGUI中还有控件类的概念,但是作 为初学者,先用熟练预先定义好的类是最重 要的。
int GUIAPI DialogBoxIndirectParam (PDLGTEMPLATE pDlgTemplate, HWND hOwner, WNDPROC DlgProc, LPARAM lParam); BOOL GUIAPI EndDialog (HWND hDlg, int endCode); void GUIAPI DestroyAllControls (HWND hDlg); 在 DialogBoxIndirectParam 中,需要指定对话框模板(pDlgTemplate)、 对话框的托管主窗口句柄(hOwner)、对话框回调函数地址DlgProc,以 及要传递到对话框过程的参数值(lParam)。EndDialog 用来结束对话框 过程。DestroyAllControls 用来销毁对话框(包括主窗口)中的所有子控件。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

当一个主窗口在创建的时候,可以指定新建一个消息队列,也可以使用别的主窗口的消息队列,如果是后者,假设主窗口A在创建时指定使用主窗口B的消息队列,那么A就被称为被托管窗口,而B则被称为托管窗口。

所以很明显CreateInfo.hHosting就是用来指明托管窗口的。

来看下面的代码,这里对MiniGUI 的两种运行模式进行了区分,1-26行是MiniGUI-Threads模式,在这种模式下,如果托管窗口为HWND_DESKTOP,则判断当前线程是否已经有了消息队列,如果没有则掉InitThreadInfo来新建一个消息队列,否则使用已经有的消息队列;如果托管窗口不为HWND_DESKTOP,则返回hHosting所在的主窗口的消息队列。

这就保证了同一个线程的所有窗口使用同一个消息队列。

27-31行是非MiniGUI-Threads模式下,新的主窗口使用HWND_DESKTOP的消息队列,托管主窗口如果为空则使用HWND_DESKTOP,否则设置为pHosting所在的主窗口。

3.下面的几行是对pWin进行初始化的操作,第1行赋值消息处理回调函数。

第9行,
初始化pZorderNode成员
的MSG_SIZECHANGING和MSG_CHANGESIZE消息,会调用本窗口消息回调函数中的相应处理部分。

第6行是发送MSG_ADDNEWMAINWIN消息给HWND_DESKTOP窗口,HWND_DESKTOP窗口主要负责初始化Clip区和Invalid 区,并且把当前窗口添加到sg_MainWinZOrder链表里,这个链表记录的是所有窗口的叠加顺序,在显示和隐藏窗口的时候,叠加顺序很重要,它会决定屏幕上哪些窗口会受影响而需要重绘。

第9行发送MSG_CREATE消息给窗口,窗口接受到此消息一般进行子窗口的初始化和创建,如果创建失败了,则通知HWND_DESKTOP窗口销毁该主窗口。

接下来我们看对话框的创建过程,对话框分为模态和非模态对话框。

非模态对话框的创建过程和主窗口的创建过程差不多,其中也调用了CreateMainWindow函数,之后还调用了CreateWindowEx创建对话框上的控件。

模态对话框就是显示之后,用户不能再切换到其他主窗口进行工作的对话框,而只能在关闭之后,才能使用其他的主窗口,通过DialogBoxIndirectParam创建,一开始的步骤与非模态对话框类似,以下的代码是其不同的部分:第7行,hOwner是待创建对话框的托管主窗口,这里其实是把它disable掉了。

第11行是处理MSG_INITDIALOG消息。

第18-21行,是消息处理的循环机制,这里可以看到这就是为什么模态对话框一定要等到关闭之后,才可以使用其它的主窗口,这里还需要注意一点,由于是从对话框的托管主窗口是HWND_DESKTOP窗口,因此他们共用一个消息队列,此时,对话框可能接受到发送给托管主窗口的消息,而由于在第7行中已经将托管主窗口的dwStyle设置为WS_DISABLE了,因此在这些消息处理流程里面可以做相应的处理(例如当窗口被设置为WS_DISABLE时,忽略该消息)。

25-28行,当窗口关闭时,进行的收尾工作。

第31行enable托管主窗口。

第23行判断了当前对话框是否是激活窗口,如果是的话,当
最后说一下子窗口(即控件)的创建过程。

在MiniGUI中通过调用CreateWindow函数(CreateWindow其实是CreateWindowEx函数的宏)可以建立某个控件。

控件的创建需要一个PCONTROL结构变量,下面这段代码中的第1行获取控件的主窗口。

第4行通过向HWND_DESKTOP发送MSG_GETCTRLCLASSINFO,接受到消息之后会调用GetControlClassInfo函数根据传入的spClassName来获取控件的class info。

控件的class info包括控件名称,默认的风格和扩展风格,消息回调函数等。

后续的代码设置控件
HWND_DESKTOP接受到之后,会调用dskOnNewCtrlInstance函数创建控件,将它添加到。

相关文档
最新文档