第51章emWin(ucgui)MULTIPAGE-多页控件
第一章:emwin介绍
第1章e m W i n介绍本期教程开始带领大家了解一下STemWin的基本知识,其实确切的讲应该叫emWin基础知识,由于教程使用的开发板是ST的微控制器,所以就把名字统一命名成STemWin(为什么叫STemWin,在下面会有详细的讲解)。
1.1 STemWin,emWin,μCGUI之间的关系1.2 SEGGER公司介绍1.3 STemWin介绍1.4 STM32F103和407跑STemWin性能测试1.5 STemWin论坛1.6 总结1.1S T e m W i n,e m W i n,μC G U I之间的关系这个放在最开头进行说明,因为很多的初学者比较的迷惑。
对于一些刚学GUI的用户来说,知道μCGUI的比较多,而不知道所谓的emWin或者STemWin。
这个并不奇怪,主要是因为大部分人只知道SEGGER公司的做的JLINK,而不知道他们还有RTOS和相关的中间件(中间件的意思就是基于RTOS的文件系统,GUI,USB主机和设备协议栈等)。
1.1.1μCGUI在国内比较火的原因μCGUI在国内前几年比较火的原因有三点:●一个是μCOS-II在国内的推广,自从Micrum公司出的那本《嵌入式实时操作系统μCOS-II》发布之后,国内关于μCOS-II的资料就是普天盖起,再加上各种培训机构和开发板的推广,μCOS-II就在国内火起来了。
μCOS-II火的同时,它配套的中间件,特别是μCGUI就跟着在国内火了起来。
●前几年国内有一个μCGUI的论坛,这个论坛在国内的μCGUI方面应该算是做得最好的,特别是那个站长在μCGUI方面的研究,这位站长对于μCGUI在国内的发展功不可没。
●还有一个原因就是μCGUI是带有源码的,很多时候可以通过修改部分的源码实现一些特殊的功能,现在网上流传的μCGUI的源码已经不知道经过多少人的手被修改过,最原始的的代码已经在官网上面找不到了。
1.1.2emWin和μCGUI的关系首先要明白,这两个GUI是一个东西。
uCGUI使用
uCGUI使⽤最好多参考⼏篇⽂章,⽐如UC/GUI中⽂⼿册与emWin5_UM_SC0:画图函数GUI_DrawRect:在当前窗⼝中的指定位置绘制矩形(不填充,画线颜⾊为前景⾊)void GUI_DrawRect(int x0, int y0, int x1, int y1);在当前窗⼝中的指定位置绘制填充的矩形区域(填充前景⾊)(填充前景⾊)GUI_FillRect:在当前窗⼝中的指定位置绘制填充的矩形区域:清除矩形区域(为矩形区域填充背景颜⾊,图形界⾯⽤填充背景⾊达到清除屏幕的矩形区域填充背景颜⾊,图形界⾯⽤填充背景⾊达到清除屏幕的GUI_ClearRect:清除矩形区域(为)效果)效果1:存储设备不使⽤存储设备时,绘制操作直接写⼊显⽰器。
屏幕在执⾏绘制操作时随时更新,从⽽在进⾏各种更新时使屏幕闪烁。
如果在此过程中使⽤存储设备,则所有绘制操作都在存储器中执⾏。
仅在所有操作都完成后才将最终结果显⽰在屏幕上,其优点是没有闪烁。
如果不使⽤存储设备,则可以看到⼀步步的绘制操作效果,缺点是会出现显⽰器闪烁。
使⽤存储设备时,⼀次可见到所有例程的效果,就象单次操作⼀样,不能实际看见中间步骤。
以下例程是在使⽤存储设备时通常会调⽤的,基本⽤法⾮常简单:1. 创建存储设备(使⽤GUI_MEMDEV_Create() )。
2. 激活它(使⽤GUI_MEMDEV_Select() )。
3. 执⾏绘制操作。
4. 将结果复制到显⽰器中(使⽤GUI_MEMDEV_CopyToLCD() )。
5. 不再需要它时,删除该存储设备(使⽤ GUI_MEMDEV_Delete() )。
2:WM窗⼝管理器回调例程:回调例程由⽤户程序定义,指⽰在特定事件出现时图形系统调⽤特定的函数。
它们通常⽤于在窗⼝内容更改时⾃动重绘窗⼝。
窗⼝管理器的默认特性是向每个需要重绘的窗⼝发送⼀条 WM_PAINT 。
当⽤户对窗⼝有操作时,WM会发送相应的消息给该窗⼝,窗⼝可通过回调函数根据消息直接对屏(没有⽤存储设备时)或对窗⼝的存储设备进⾏操作再拷贝到屏幕上,具体的消息说明可以参考emWin的中⽂⼿册。
ucgui做界面切换
这次在用ucgui做界面切换的时候,决定不给每个菜单界面都创建一个对话框,和网友讨论的过程中,得出两种方法,一位网友说的是STM32的存储空间足够,可以先把自己所要用到的控件全部建立好,然后根据需要去设置控件是显示还是隐藏。
另一位网友认为这样有点浪费内存,采用的方法是,先建立好一个对话框,然后根据自己的需要去删除和新建控件。
之后我就选择了第二种方法,在菜单的切换中去删除和新建控件。
可能是自己太菜了,第一次删除控件和新建控件就出了问题。
问题是这样的:我先创建一个对话框作为欢迎界面(两个TEXT控件和一个BUTTON控件)hWinMenu = GUI_CreateDialogBox(_aDialogCreate,GUI_COUNTOF(_aDialogCreate),_cbWelcome,0,0,0) ;我的想法是,点击按钮后删掉按钮控件和两个TEXT控件。
然后再新建4个按钮控件。
1.hButton[0] = BUTTON_CreateAsChild(30,26,115,70,hWinMenu ,GUI_ID_BUTTON1,WM_CF_SHOW);2.hButton[1] = BUTTON_CreateAsChild(30,124,115,70,hWinMenu,GUI_ID_BUTTON2,WM_CF_SHOW);3.hButton[2] = BUTTON_CreateAsChild(188,26,115,70,hWinMenu,GUI_ID_BUTTON3,WM_CF_SHOW);4.hButton[3] = BUTTON_CreateAsChild(188,124,115,70,hWinMenu,GUI_ID_BUTTON4,WM_CF_SHOW);5.BUTTON_SetBitmapEx(hButton[0],0,&bmqd,30,10);6.BUTTON_SetBitmapEx(hButton[1],0,&bmpf,30,10);7.BUTTON_SetBitmapEx(hButton[2],0,&bmsz,30,10);8.BUTTON_SetBitmapEx(hButton[3],0,&bmdc,30,10);9.BUTTON_Delete(WM_GetDialogItem(hWinMenu,GUI_ID_BUTTON0));10.TEXT_Delete(WM_GetDialogItem(hWinMenu,GUI_ID_TEXT0));11.TEXT_Delete(WM_GetDialogItem(hWinMenu,GUI_ID_TEXT1));这样写了之后的结果是,原先的控件被删除了,我所需要的4个按钮新建成功。
uCGUI(emWin)的应用与移植
uCGUI(emWin)的应用与移植uC/GUI(emWin)的应用与移植 2006-11-19 01:38当你开始使用emWin进行编程时,通常遵循以下的步骤:第1步:配置emWin第一步通常是通过修改头文件LCDConf.h来配置emWin。
LCDConf.h中的宏定义描述了LCD显示部分硬件特性;根据你的具体情况修改这些宏定义(例如显示屏的长、宽,每像素点用几位表示,LCD控制器的类型等参数)。
第2步:定义LCD的底层驱动函数底层函数包括对LCD(控制器)的初始化函数,LCD显示缓冲区的读写函数等,完成对LCD显示硬件的直接操作。
对于映射在系统存储器上的LCD,对显示缓冲区的操作仅需要在LCDConf.h中进行定义就可以了。
但对于采用I/O端口/缓冲区操作的LCD,就必须定义相应的接口函数了。
第3步:编译,链接和测试例子代码emWin对于单任务和多任务环境下的应用都提供了例子代码。
在编程之前,对这些例子代码进行编译、链接和测试,使你能够初步了解这些代码的使用。
第4步:修改例子程序对例子代码作少量的修改。
逐步添加一些额外的指令,例如显示不同大小的文字,显示多行等等,从而进一步理解代码的应用。
第5步:emWin的多任务应用,加入到你的操作系统中如果你的系统有可能多个任务同时对显示进行操作,这时就要用到GUITask.C文件中的GUI_MAXTASK和GUI_OS宏。
第6步:采用emWin编写你自己的应用到这一步你应该对怎样使用emWin有一个清楚的了解了。
考虑如何采用emWin提供的函数来构建你的应用,并通过阅读手册来获得各函数更详细的功能和使用上的信息。
emWin的移植移植是指对emWin进行配置和修改,使它能够在你的目标系统上运行。
参考第3.4节中的第一步和第二步,移植工作主要是针对配置头文件中的宏定义进行修改。
这些宏包括:1. LCD宏,定义了显示的尺寸和一些可选择的特性(例如镜像,等等)2.LCD控制器宏,定义了怎样对控制器进行操作。
原创ucGUI入门心得
ucGUI 入门心得学习ucGUI 近一个月,感觉已经达到入门的级别,先前掌握的Windows 应用程序开发经验对于学习ucGUI 有着很大的帮助。
首先,我使用的是ucGUI 的高版本——emwin5.22 。
这个版本较旧版本多了些可用的控件和皮肤,这会让我们设计出外观更好,功能更强的界面。
然后,我们设计出来的界面需要在VC6.0 上进行调试。
网上可以下载到移植好的emwin及附带的小工具。
这些工具包括界面设计工具GUIBuilder ,图片转16进制数据工具BmpCvt和字体生成工具FontCvt。
用好这些工具对我们开发GUI有很大的帮助。
接着开始创建一个GUI 工程。
第一步用GUIBuilder 创建一个对话框做为窗体,第二步在这个对话框上面放上一些用到的控件,接下来对这些控件进行属性设置,这些都做完以后,点击保存菜单就会生成一个C文件。
VC6.0引用这个C文件就可以显示刚才设计的界面了。
如果让我们的界面更加美观就需要用到BmpCvt 工具,它可以把图片生成16 进制数据供图片框调用。
BmpCvt可以生成透明背景的图片,效果相当不错。
制作透明图片需要用到Photoshop,在PS里新建一个带透明背景的图片,然后把我们图片粘贴进去,再擦除一此不需要的颜色就可以了。
带透明背景的图片用BmpCvt打开以后,可以看到透明部分显示的是马赛克就对了。
用FontCvt 工具可以生成我们需要的各种字体,也包括汉字。
我习惯使用Keil 开发环境,Keil 里使用汉字是Ansi 编码,而FontCvt 生成的是Unicode 编码,这显然不能兼容。
这需要转换一下就可以直接使用了。
最后总结一下在使用emwin 过程中遇到的一些问题。
1. 在对话框里使用画线画多边形或显示文字这些基本绘图功能。
只需要在窗口回调函数下的WM_PAINT肖息里操作即可。
2. 在点取下拉列表的表项时,会点击到其下边的其它控件,造成误操作。
[STemWin教程入门篇]第一期:emWin介绍
[STemWin教程⼊门篇]第⼀期:emWin介绍特别说明:原创教程,未经许可禁⽌转载,教程采⽤回复可见的形式,谢谢⼤家的⽀持。
armfly-x2,x3,v2,v3,v5开发板裸机和带系统的emWin⼯程已经全部建⽴,链接如下:SEGGER公司介绍了解emWin之前,先了解⼀下SEGGER这家公司,了解⽣产商才能对emWin有更加全⾯的认识。
SEGGER公司成⽴于1997年,到现在的2013年,有差不多16年的历史了,这家公司主要有两个office,⼀个是在德国的Hilden,另个在美国的 Massachusetts。
官⽹还有⼀个他们⼯作地⽅的照⽚,看着很不错,我这⾥也把这个照⽚贴上这家公司的产品主要有三个⼤的⽅向,下⾯分别的说⼀下:RTOS和中间件embOS (Real Time Operating System)embOS/IP (TCP/IP Stack)emWin (Graphic Software & GUI)emFile (File System)emUSB Device (USB Device Stack)emUSB Host (USB Host Stack)J-Link Debug ProbesJ - Link PROJ - Link ULTRA+J - Link PLUSJ - LinkJ - Trace Cortex-M3J - Trace ARMProduction ProgrammersFlasher ARMFlasher RXFlasher STM8Flasher ST7Flasher 5Flasher 5 PRO官⽹上⾯也有⼀个论坛,不过论坛的打开速度⽐较的慢,⽽且是英⽂的,问个问题也不太⽅便Energy Micro获得了SEGGER的授权,可以免费的使⽤,想了解其他信息的可以去官⽹查看,这⾥有⼏个官⽹张贴的,客户设计界⾯,设计的的确很好看。
其实话说回来,要想设计⽐较好的界⾯还是得⼿⼯设计,⽤控件很难做出这种效果,除⾮有这种效果的控件。
uCGUIBuilder使用说明
一、ucGUBuilder使用方法 (2)1,新建ucGUI窗体 (2)2、设置窗体的属性 (3)3、向窗体添加控件 (4)二、V ersion 2.1.0.5 新增功能 (9)1、新增C语言语法高亮显示 (9)2、支持设计的窗体保存为文件,并可以打开 (9)3、对所有控件属性添加了Description (12)4、保存窗体布局 (13)三、Version 3.0.0.0 新增功能 (15)1、支持窗体设计器基本操作 (15)2、多控件操作 (15)3、文件关联 (16)4、在线检查更新 (18)5、自定义控件ID (20)四、Version 3.1.0.0新增功能 (22)1、添加了控件ID自动增加功能 (22)2、用户自定义字体 (22)3、中英文切换 (23)4、自动检查更新 (24)6、问题反馈或提建议 (25)五、Version 4.0新增功能 (27)1、代码分离 (27)2、添加编辑器工具栏 (28)3、内嵌VC编译器能直接运行模拟器 (29)4、如何使用代码自动完成功能 (30)声明:此程序用C#开发,需要.Net Framework 3.5或跟高版本支持大家在测试的过程中发现什么BUG或者有什么建议可以发Email:ucguibuilder@给我,一、ucGUBuilder使用方法1,新建ucGUI窗体或者单击新建窗体设计器工具栏按钮或者点下拉箭头选择新建窗体设计器新建后的效果:2、设置窗体的属性(包括大小,标题栏文本,……)3、向窗体添加控件(1)、在工具箱单击选中你要添加的控件将鼠标移动到窗体上,鼠标光标变成了十字形然后按住鼠标左键,拖动会出现一个矩形,拖动到合适大小,松开鼠标,在刚才矩形区域的地方就会添加一个同样大小的在工具箱选中的控件。
或者在工具箱中选中控件,将鼠标移动到窗体上,鼠标光标变成十字形时,单击鼠标,也能在单击处添加一个默认大小的选择的控件。
4、调整控件的大小及属性把鼠标移动到选中的控件四周的小方块上,当鼠标指针变成箭头时,按住鼠标左键就可向对应的方向调整控件大小,把鼠标移动到控件上,按住鼠标左键就可拖动控件,移动控件位置也可以,修改控件属性,来调整控件二、Version 2.1.0.5 新增功能1、新增C语言语法高亮显示2、支持设计的窗体保存为文件,并可以打开单击保存按钮或者菜单-》保存会弹出保存文件对话框选择路径,输入文件名即可保存(保存格式为ucfrm 格式)保存完毕。
原创emWin显示中文(步步带图)
由于项目需要,使用emWin做机器的GUI,但是GUI官方文档中没有关于显示中文化文档和实例,经过查看网上某位网友的博客,但由于该网友说得也不是太清,也不全,所以我决定写一份比较详细的文档。
以下是具体步骤:1.首先下载emWin源码,要带模拟器的那种(就是在VC6.0下能模拟的那种版本)2.在VC6.0下(更为版本亦可),运行一个实例,如果能运行起来,说明环境OK。
3.下载一个完整版的FontCvt.exe,因为源码tool下的版本很多同志反映转换出来的是乱码,有的在tool下甚至就没这个工具,我的就没有。
网上有完整版的下载,百度“完整版FontCvt”即可4.生成字库。
打开FontCvt.exe,界面如下,选择“Standard”点击以上界面中的“OK”,弹出:然后选择你想生成的汉字字体,以及生成字体的大小。
如选择宋体,大小为16.点击“确定”后,在出现的窗口中点击edit/Disable all characters(禁用unicode下的所有字体,因为很多是不们用不上的,后续再选择我们需要的汉字及字符)选择我们需要的字符或汉字加入到字库首先我们加入常用的英文和数字字符Edit->Enable range of characters如下图,输入字符编码的起始范围点击OK后上图中,白色字符部分为我们要加入字库中的字符,灰色部分为我们不需要的(未加入字库)。
接下来,我们要加入汉字到字库了。
为了加入我们所需要的汉字到字库,我们就得知道汉字的unicode编码。
那就从网上下个小工具,专门用来查汉字的unicode。
百度“汉字转unicode “,在西西软件中找到了一个(其它网站的工具亦可,只要能方便查到某个汉字对应的unicode编码即可),见下:打开Unicode.exe上面我们输入一个“科”字,下面是其对应的unicode编码,此处要注意,编码为:D1 79(16进制),但是由于大小端问题,其实际的编码应为:79D1.到此,我们知道“科”的编码了,那么就在FontCvt里找这个字吧。
vba multipage控件用法
VBA Multipage 控件用法一、VBA Multipage 控件简介VBA Multipage 控件是 Visual Basic for Applications (VBA) 中的一种常用控件,它可以帮助用户在一个窗体或用户形式上创建带有多个选项卡的界面,使得用户可以通过点击不同的选项卡来切换显示不同的内容。
这种控件的使用,可以极大地提高界面的交互性和易用性,是VBA程序中不可或缺的一部分。
二、VBA Multipage 控件的基本属性和方法1. Add 方法:Multipage 控件可以通过 Add 方法来动态地添加选项卡。
Add 方法的格式为:Multipage1.Add(名称, 标题, 索引),其中名称为选项卡的名称,标题为选项卡的文字标题,索引为选项卡的索引号。
2. Remove 方法:Multipage 控件可以通过 Remove 方法来删除选项卡。
Remove 方法的格式为:Multipage1.Remove(索引),其中索引为要删除选项卡的索引号。
3. Value 属性:Multipage 控件的 Value 属性可以用来获取或设置当前选中的选项卡。
可以通过 Multipage1.Value = 1 来选择第一个选项卡。
4. Pages 属性:Multipage 控件的 Pages 属性可以用来获取选项卡的集合。
可以通过 Multipage1.Pages(索引) 来获取指定索引的选项卡。
三、VBA Multipage 控件的常见用法1. 多表单录入:在VBA程序中,经常需要对多个表单进行录入。
使用Multipage 控件可以将多个表单整合到一个窗体中,通过选项卡来切换不同的表单,使得用户体验更加流畅。
2. 设置向导:在某些应用中,需要引导用户依次填写多个步骤的信息。
使用 Multipage 控件可以模拟设置向导的效果,通过多个选项卡来展示不同步骤的内容,简化用户操作流程。
3. 数据展示:在某些需求中,需要以选项卡的形式来展示多个数据集。
第55章 MULTIPAGE-多页控件
按键
反应
GUI_KEY_PGUP
切换到下一页。
GUI_KEY_PGDOWN
切换到上一页。
特别注意一点,对于多页控件来说,要先聚焦到这个控件上了,给多页控件发送按键消息才会有反应。
55.2.3 多页控件 API 函数
多行文本控件的 API 函数比较多,但调用都不难。我们这里把以下两个比较相似的函数特别解释下:
x0 = 23;
y0 = 25;
xSize = 400;
ySzie = 240;
Flags = 0;
Para = 0x0;
NumExtraBytes = 0;
对于这个对应关系要注意以下两点:
这里的 x0 和 y0 坐标位置是相对于对话框资源列表中框架窗口的客户端窗口的位置坐标。
Id 号,这里的 Id 号是用户自定义的,emWin 在 GUI.h 文件中也定义了部分多行文本控件的 Id 号,
已被点击。 已被释放。 已被点击,且指针已移出控件,但没有释放。 控件的文本已更改。
注意,实际测试发现消息 WM_NOTIFICATION_VALUE_CHANGED 很奇葩,点击选项卡或者切换选项卡,
2016年11月24日
版本:2.0
第 3 页 共 61 页
武汉安富莱电子有限公司
55.2.1 多页控件支持的通知代码
多页控件支持的通知代码主要是用来处理多页控件消息用的,多页控件主要支持四种消息事件,点击
消息,释放消息,移开消息(点击了多页控件,且从多页控件所在的区域移开了但没有释放)和多页控件选
项卡的内容被更改消息。比如用户通过触摸屏点击了多页控件,窗口管理器会给多页控件父窗口回调函数
下面接着说说多页控件的组成结构,一个多页控件是由 1 个 MultiPage 窗口,1 个客户端窗口和 n 个用户所创建的页面窗口组成,n 的大小由用户决定,用户创建了几个,n 就是几: 1 个 MULTIPAGE 窗口 1 个客户端窗口 N 个页面窗口 页面窗口是被添加到客户端窗口上的,具体的层次关系如下:
Windows 常用控件
Windows 窗体控件当设计和修改解决方案的用户界面时,需要添加、对齐和定位控件。
控件是包含在窗体对象内的对象。
每种类型的控件都具有其自己的属性集、方法和事件,以使该控件适合于特定用途。
可通过在设计器中操作控件并编写代码来在运行时动态添加控件。
本节内容将控件放在Windows 窗体上列出向Windows 窗体添加控件的各种方法。
排列Windows 窗体上的控件建议其他一些有关可以使用窗体上的控件完成的操作的主题。
标记单个Windows 窗体控件并提供它们的快捷方式描述键盘快捷键、控件上的文本标签和组合键的使用。
可在Windows 窗体中使用的控件列出与Windows 窗体一起使用的控件以及可用每个控件完成的基本操作。
按类别分类的控件列出所有可用控件(按类别组织)。
将控件放在Windows 窗体上根据应用程序的需要,有大量可放在Windows 窗体上的各种控件。
本节内容向Windows 窗体添加控件提供有关如何将控件附加到窗体的说明。
向Windows 窗体添加无用户界面的控件给出将无用户界面的控件追加到应用程序的说明。
向Windows 窗体添加ActiveX 控件给出使用旧式ActiveX 控件的说明。
在Windows 窗体上承载ActiveX 控件时的注意事项枚举当规划使用ActiveX 控件的应用程序时应注意的事项。
相关章节Windows 窗体控件链接到关于控件以及使用这些控件可以完成的操作的介绍性主题。
向Windows 窗体添加控件请参见Windows 窗体控件| 排列Windows 窗体上的控件| 调整Windows 窗体上控件的大小| 设置Windows 窗体控件所显示的文本| 可在Windows 窗体中使用的控件| 创建Windows 窗体大多数窗体都是通过将控件添加到窗体表面来定义用户界面的方式进行设计的。
控件是窗体上的一个组件,用于显示信息或接受用户输入。
在窗体上描述控件打开窗体。
第52章emWin(UCGUI)PROGBAR-进度条控件
第52章PROGBAR-进度条控件本期教程讲解STemWin支持的进度条控件。
51. 1 进度条控件介绍51. 2 官方WIDGET_Multipage实例51. 3 使用GUIBulder建立多页控件51. 4 总结52.1进度条控件介绍进度条通常在应用程序中用于实现虚拟化,下面的截图是设置了皮肤和没有设置皮肤时的显示效果:设置皮肤后显示效果如下:52.2官方WIDGET_Multipage实例官方的这个实例很好的演示了MULTIPAGE的使用,这个例子在模拟器中的位置:源码如下(程序中进行了详细的注释):---------------------------------------------------------------------- File : WIDGET_Progbar.cPurpose : Simple demo shows the use of the PROGBAR widget---------------------------------------------------------------------- */#include "GUI.h"#include "PROGBAR.h"#include <stddef.h>/******************************************************************* ** static code********************************************************************* *//******************************************************************* ** _DemoProgBar0 对应的是上面的进度条,1 对应的是下面的进度条。
emWin使用文档
目录一、emWin介绍------------------------------------------------------------------------------------------------ 11.1 emWin简介 ------------------------------------------------------------------------------------------- 11.2 emWin应用的软件架构--------------------------------------------------------------------------- 2二、《emWin用户手册》介绍及使用------------------------------------------------------------------- 22.1 《emWin用户手册》简介----------------------------------------------------------------------- 22.2 根据函数名查找库函数说明 -------------------------------------------------------------------- 32.3 根据功能查找库函数 ------------------------------------------------------------------------------ 3三、emWin开发过程中调用API及功能---------------------------------------------------------------- 43.1 通用小工具API -------------------------------------------------------------------------------------- 43.2 BUTTON API -------------------------------------------------------------------------------------------- 53.3 EDIT API ------------------------------------------------------------------------------------------------- 6四、搭建emWin的Windows仿真环境----------------------------------------------------------------- 74.1 仿真版本emWin文件介绍---------------------------------------------------------------------- 74.2 使用VS2010 仿真emWin ---------------------------------------------------------------------- 84.3 emWin仿真工程概览 ------------------------------------------------------------------------------ 9五、GUI_Builder --------------------------------------------------------------------------------------------- 185.1 简介--------------------------------------------------------------------------------------------------- 185.2 创建对话框----------------------------------------------------------------------------------------- 195.3 GUI_Builder的输出 ------------------------------------------------------------------------------- 205.4 如何使用C文件 -------------------------------------------------------- 错误!未定义书签。
UCGUI窗体管理及消息处理机制分析
UCGUI窗体管理及消息处理机制分析----多对话框/模态窗体/透明窗体支持分析问题的提出:[求助]关于对话框处理程序中,想在OK按钮按下后想弹出一个消息框,该怎么做?直接加在程序中好像不行,如何让消息框弹出后成为模态窗体呢?请版主帮帮忙。
[解析]在UCGUI中,对话框只支持单个对话框窗体,不支持多个独立的对话框,现在我们从其源码来分析一下它为什么支持单个对话框窗体以及如何改进它以支持多个独立对话框,要讲解这个问题我们必须首先理解UCGUI中的窗体消息LOOP,没有消息LOOP窗体就是死水一潭,不能接受任何外界的输入,只是一个画在那里的图画而已。
[声明]本文中提到的源码均为UCGUI3.24版源码,新版UCGUI源码会有改动,请下载本文示例代码来结合阅读本文。
摘要: 本文主要介绍了UCGUI中的对话框的消息处理机制,并指出在现有UCGUI上如何增加多窗体支持,并在分析解决问题时着重介绍了其输入设备消息WM_TOUTCH及WM_KEY 两类消息处理方法,并同时初步指出一种在UCGUI中实现模态对话框以及透明窗体的原理说明,还有窗体重画消息WM_PAINT消息处理原理。
1一、各种基本消息介绍及处理流程----对话框内部消息流转及外部消息LOOP分析.UCGUI是采用的消息驱动的,它专门有对外的一套收集消息的接口, 我在模似器中, 就是通过LCD模拟显示屏窗口的MOUSE消息,将MOUSE消息传入到这个接口中, 以驱动UCGUI中的窗体的。
UCGUI中的消息驱动其实与WINDOWS的是类似的,几种基本的消息与WINDOWS是一样的,但UCGUI的更简单且消息更少,对于一些消息的处理得也很简化,没有WINDOWS那么多的消息种类及复杂处理。
在WINDOWS中,如我们处理按钮控件的点击事件的是在WM_COMMAND消息中,通过按钮的标志ID来区分不同的按钮,所以按钮标志ID必须不同的,否则无法区别开(除非不在父窗体的WM_COMMAND消息中处理)。
多文档界面QMdiArea
多⽂档界⾯QMdiArea当使⽤多⽂档界⾯功能时,我们是将QMdiArea作为主窗⼝的中央部件,然后在这个中央部件中,我们可以同时打开很多个⼦窗⼝QMdiSubWindow样式:1import sys2from PyQt5.QtGui import QIcon3from PyQt5.QtWidgets import QApplication, QMainWindow, QMdiArea, QMdiSubWindow, QAction, QTextEdit456class Demo(QMainWindow):#继承QMainWindow7def__init__(self):8 super(Demo, self).__init__()9self.mdi_area = QMdiArea(self) # 实例化⼀个多⽂档窗⼝10self.setCentralWidget(self.mdi_area) #把多⽂档窗⼝设置为主窗⼝的中央控件1112 self.toolbar = self.addToolBar('Tool Bar')1314 self.new_action = QAction('新建', self)15 self.close_action = QAction('关闭', self)16 self.close_all_action = QAction('全关闭', self)17 self.mode1_action = QAction('层叠', self)18 self.mode2_action = QAction('平铺', self)1920 self.new_action.triggered.connect(self.new_func)21 self.close_action.triggered.connect(self.mdi_area.closeActiveSubWindow)22#self.mdi_area.closeActiveSubWindow 关闭当前激活的窗⼝2324 self.close_all_action.triggered.connect(self.mdi_area.closeAllSubWindows)25#self.mdi_area.closeAllSubWindows 关闭所有⼦窗⼝2627 self.mode1_action.triggered.connect(self.mdi_area.cascadeSubWindows)28#self.mdi_area.cascadeSubWindows 层叠布局⼦窗⼝2930 self.mode2_action.triggered.connect(self.mdi_area.tileSubWindows)31#self.mdi_area.tileSubWindows 平铺布局⼦窗⼝3233 self.toolbar.addAction(self.new_action)34 self.toolbar.addAction(self.close_action)35 self.toolbar.addAction(self.close_all_action)36 self.toolbar.addAction(self.mode1_action)37 self.toolbar.addAction(self.mode2_action)3839def new_func(self):40 text = QTextEdit()41sub = QMdiSubWindow() #实例化⼀个⼦窗⼝42sub.setWidget(text) #设置⼦窗⼝的控件43self.mdi_area.addSubWindow(sub) #在多⽂档窗⼝中添加⼦窗⼝44sub.show() #显⽰⼦窗⼝454647if__name__ == '__main__':48 app = QApplication(sys.argv)49 demo = Demo()50 demo.show()51 sys.exit(app.exec_())。
emwin快速设计界面的方法 -回复
emwin快速设计界面的方法-回复如何使用emwin快速设计界面。
emwin(Embedded Wizard)是一种用于嵌入式系统开发的图形用户界面(GUI)设计工具,它提供了丰富的组件库和定制化选项,使开发人员能够快速设计和开发高质量的用户界面。
本文将分为以下几个步骤,介绍如何使用emwin快速设计界面。
第一步:准备开发环境在使用emwin之前,需要先准备好开发环境。
首先,确保你的嵌入式系统支持emwin,并已经安装了emwin的开发软件包。
然后,根据开发系统的要求,配置好编译器和调试工具。
最后,在你的开发板上连接显示屏,并确保能够正确驱动显示。
第二步:创建新工程在emwin的开发环境中,创建一个新的工程是开始设计界面的第一步。
打开emwin的开发软件包,并选择“新工程”选项。
根据你的项目需求,设置工程的名称和路径。
然后,选择一个适当的目标设备和显示分辨率,并设置其他工程属性。
点击“确定”按钮,创建一个新的emwin 工程。
第三步:设计界面在emwin的工程中,设计界面是一个非常重要的任务。
emwin提供了一个方便的可视化界面设计器,可以让你通过拖放组件来快速创建用户界面。
首先,选择一个适当的窗口尺寸,并在界面设计器中创建一个新窗口。
然后,在工具箱中选择你需要的组件(如按钮、文本框、图像等),并将它们拖放到窗口中。
接下来,通过调整组件的大小和位置,以及设置组件的属性,来定制化界面。
emwin的界面设计器支持多种属性设置,例如背景颜色、文字字体、按钮样式等。
通过设置这些属性,你可以根据你的项目需求来设计出一个高效美观的界面。
第四步:添加交互逻辑设计一个界面只是第一步,为了使界面具有实际的功能,还需要添加一些交互逻辑。
emwin提供了一种基于事件的编程模型,可以让你很方便地添加交互逻辑。
通过选择一个组件,并在属性面板中设置事件回调函数,你可以将该组件与一个自定义的处理函数进行关联。
在处理函数中,你可以针对不同的事件类型(如按钮点击、滑动等)编写相应的逻辑。
第51章emWin(ucgui)MULTIPAGE-多页控件
*/
static void _cbBkWindow(WM_MESSAGE * pMsg) {
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font24_ASCII);
static const GUI_WIDGET_CREATE_INFO _aDialogCreate6[] = {
{ WINDOW_CreateIndirect, "Dialog 6", 0,
{ SCROLLBAR_CreateIndirect, "",
GUI_ID_SCROLLBAR0,
{ TEXT_CreateIndirect,
static const GUI_WIDGET_CREATE_INFO _aDialogCreate4[] = {
{ WINDOW_CreateIndirect, "Dialog 4", 0,
{ MULTIEDIT_CreateIndirect, "Text", GUI_ID_MULTIEDIT0,
static const GUI_WIDGET_CREATE_INFO _aDialogCreate3[] = {
{ WINDOW_CreateIndirect, "Dialog 3", 0,
{ RADIO_CreateIndirect, "",
GUI_ID_RADIO0,
{ TEXT_CreateIndirect,
第50章emWin(UCGUI)MULTIEDIT-多行文本控件
第50章MULTIEDIT-多行文本控件本期教程讲解STemWin支持的多行文本控件。
50. 1 多行文本控件介绍50. 2 官方WIDGET_Multiedit实例50. 3 使用uCGUIBulder建立多行文本控件50. 4 总结50.1多行文本控件介绍通过MULTIEDIT小工具可编辑多行文本。
它既可以被用作简单的文本编辑器,也可以用来显示静态文本。
该小工具支持带滚动条和不带滚动条的滚动。
下表显示MULTIEDIT小工具的外观:50.1.1多行文本支持的通知代码以下事件是多行文本控件作为WM_NOTIFY_PARENT消息的一部分发送给其父窗口的:消息 描述WM_NOTIFICATION_CLICKED 已单击小工具。
WM_NOTIFICATION_RELEASED 已释放小工具。
WM_NOTIFICATION_MOVED_OUT 已单击小工具,并且指针已移出小工具,但没有释放。
WM_NOTIFICATION_SCROLL_CHANGED 可选滚动条的滚动位置已更改。
WM_NOTIFICATION_VALUE_CHANGED 小工具的文本已更改。
50.1.2多行文本支持的键盘反应如果控件具有输入焦点,则它将对下列各键做出反应:按键 反应GUI_KEY_UP 将光标向上移动一行。
GUI_KEY_DOWN 将光标向下移动一行。
GUI_KEY_RIGHT 将光标向右移动一个字符。
GUI_KEY_LEFT 将光标向左移动一个字符。
GUI_KEY_END 将光标移到当前行的末尾。
GUI_KEY_HOME 将光标移到当前行的开头。
GUI_KEY_BACKSPAC 如果小工具在读/写模式下工作,此按键将删除光标之前的字符。
GUI_KEY_DELETE 如果小工具在读/写模式下工作,此按键将删除光标之下的字符。
GUI_KEY_INSERT 在插入模式和覆盖模式之间切换。
GUI_KEY_ENTER 如果小工具在读/写模式下工作,此按键将在当前位置插入一个新行(’\n’)。
第5章emWin(UCGUI)模拟器的使用方法
第5章emWin(UCGUI)模拟器的使用方法第5章emWin5.24模拟器的使用方法本期主要是带领大家学习emWin5.24模拟器的使用,主要内容是学习如何运行emWin5.24安装包里面的例子以及emWin查看器的使用。
5. 1 emWin5.24的使用方法5. 2 emWin5.24查看器的使用方法5. 3 总结5.1e m W i n5.24的使用方法如果没有emWin5.24模拟器的,需要到官网下模拟器。
解压emWin5.24的安装包,用VC6.0打开后的效果是这样的:默认的情况下运行的是emWin官方的DEMO,点击下面这两个按钮后运行:5.1.1如何改变显示界面的大小以前的那些版本,改变显示界面大小的时候,完全的没有反应,现在的这个模拟器的版本完全的没有问题的,默认的情况下是320*240的。
运行官方的DEMO后显示效果如下:现在我们把分辨率改成480*272,显示效果就是下面这个样子的。
5.1.2如何在这个工程上运行官方其它例子比如我们要运行这个例子2DGL_BMPExport.c。
这里我们需要把Application文件从工程里面独立出去第一步:●第二步:勾选红色方块就可以了。
●第三步第四步:这里把这个对勾去掉设置完以后就可以运行这个例子了。
5.1.3如何运行下面这种官方例子比如下面这种例子:冲突,所以要把下面这里的独立出来(方法和上面讲的一样)。
5.2e m W i n5.24查看器的使用方法关于emWin5.24查看器的位置在模拟器软件包的这个路径下:查看器的使用方法也比较简单,用户可以先运行emWin模拟器再打开查看器或者先运行查看器再打开emWin模拟器都可以的。
下面是模拟器的实际显示效果:查看器在多层显示的时候比较有用。
5.3总结官方的模拟器是个非常好的东西,一般情况下,界面比较麻烦的可以先在上面做好,然后再移植到开发板上面。
从下期教程开始,我们将讲解STemWin中API的使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*
*
MainTask
*/
void MainTask(void) {
WM_HWIN hMultiPage;
WM_HWIN hFrameWin;
WM_HWIN hDialog;
// // 使能窗口使用内存设备 // WM_SetCreateFlags(WM_CF_MEMDEV); GUI_Init(); /* 设置桌面窗口的回调函数 */ WM_SetCallback(WM_HBKWIN, _cbBkWindow);
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate1[] = {
{ WINDOW_CreateIndirect, "Dialog 1", 0,
0, 0, 260, 100, FRAMEWIN_CF_MOVEABLE },
{ BUTTON_CreateIndirect, "Button", GUI_ID_BUTTON0,
*
*
Public code
*
**********************************************************************
*/
/*********************************************************************
*
*
Static code
*
**********************************************************************
*/
/*********************************************************************
MULTIPAGE 控件的结构
第1页 共8页
STM32-V5 开发板 STemWin 教程
包含 n 个页面的 MULTIPAGE 小工具由 n+2 个 窗口组成: 1 个 MULTIPAGE 窗口 1 个客户端窗口 N 个页面窗口 页面窗口将被添加到小工具的客户端窗口。右图显示了控件的结构。
*
*
Static data
*
**********************************************************************
*/
/*********************************************************************
};
0, 0, 260, 100, FRAMEWIN_CF_MOVEABLE }, 5, 30, 0, 0, 0, 3}, 25, 30, 50, 15, TEXT_CF_LEFT }, 25, 50, 50, 15, TEXT_CF_LEFT }, 25, 70, 50, 15, TEXT_CF_LEFT }, 5, 10, 50, 20, TEXT_CF_LEFT }
{ TEXT_CreateIndirect,
"Select 1", GUI_ID_TEXT1,
{ TEXT_CreateIndirect,
"Dialog 2", 0,
};
0, 0, 260, 100, FRAMEWIN_CF_MOVEABLE }, 5, 30, 0, 0, 0}, 5, 50, 0, 0, 0}, 25, 30, 50, 15, TEXT_CF_LEFT }, 25, 50, 50, 15, TEXT_CF_LEFT }, 5, 10, 50, 20, TEXT_CF_LEFT }
51.1.1 多页支持的通知代码
以下事件是编辑框控件作为 WM_NOTIFY_PARENT 消息的一部分发送给其父窗口的:
消息
描述
WM_NOTIFICATION_CLICKED
已被点击。
WM_NOTIFICATION_RELEASED
已被释放。
WM_NOTIFICATION_MOVED_OUT
已被点击,且指针已移出控件,但没有释放。
STM32-V5 开发板 STemWin 教程
第51章 MULTIPAGE-多页控件
本期教程讲解 STemWin 支持的多页控件。 51. 1 多页控件介绍 51. 2 官方 WIDGET_Multipage 实例 51. 3 使用 GUIBulder 建立多页控件 51. 4 总结
51.1 多页控件介绍
*
*
Dialog resource
*
* These tables contain the information required to create the dialogs.
* It has been created manually, but could also be created by the GUIBuilder.
STM32-V5 开发板 STemWin 教程
官方的这个实例很好的演示了 MULTIPAGE 的使用,这个例子在模拟器中的位置:
‘
源码如下(程序中进行了详细的注释):
#include <stdlib.h>
#include "GUI.h" #include "MULTIPAGE.h"
/*********************************************************************
MULTIPAGE 类似于笔记本中的分隔卡或文件柜中的标签。通过使用 MULTIPAGE 控件,应用程序可为 窗口或对话框的相同区域定义多个页面。每个页面包含特定类型的信息或用户选择相应页面时应用程序会显 示的一组控件。如果要选择一个页面,则必须单击该页面的选项卡。如果无法显示所有选项卡,则 MULTIPAGE 控件会自动在边缘处显示一个小滚动条以滚动页面。下表显示 MULTIPAGE 控件的外观:
*
*
_cbDialog4
*/
static void _cbDialog4(WM_MESSAGE * pMsg) {
WM_HWIN hItem;
WM_HWIN hDlg;
hDlg = pMsg->hWin; switch (pMsg->MsgId) { case WM_INIT_DIALOG:
hItem = WM_GetDialogItem(hDlg, GUI_ID_MULTIEDIT0); MULTIEDIT_SetText(hItem, "MULTIEDIT widget"); MULTIEDIT_SetInsertMode(hItem, 1); break; default:
第4页 共8页
WM_DefaultProc(pMsg); } }
STM32-V5 开发板 STemWin 教程
/*********************************************************************
*
*
_cbBkWindow
*
* 桌面窗口的回调函数,主要是重绘部分
*/
static void _cbBkWindow(WM_MESSAGE * pMsg) {
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font24_ASCII);
static const GUI_WIDGET_CREATE_INFO _aDialogCreate6[] = {
{ WINDOW_CreateIndirect, "Dialog 6", 0,
{ SCROLLBAR_CreateIndirect, "",
GUI_ID_SCROLLBAR0,
{ TEXT_CreateIndirect,
5, 30, 80, 20, 0},
{ TEXT_CreateIndirect,
"Dialog 1", 0,
5, 10, 50, 20, TEXT_CF_LEFT }
};
第3页 共8页
STM32-V5 开发板 STemWin 教程
static const GUI_WIDGET_CREATE_INFO _aDialogCreate2[] = {
GUI_DispStringHCenterAt("WIDGET_Multipage - Sample", 160, 5);
break;
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
// // 创建框架窗口 // hFrameWin = FRAMEWIN_Create("FrameWindow", NULL, WM_CF_SHOW, 40, 44, 240, 152); /* 设置窗口的属性 */ FRAMEWIN_SetClientColor(hFrameWin, GUI_GREEN); FRAMEWIN_SetActive(hFrameWin, 1); FRAMEWIN_SetMoveable(hFrameWin, 1);
WM_NOTIFICATION_VALUE_CHANGED 编辑小工具的值 (内容)已更改。
51.1.2 多页支持的键盘反应