emWin和ucGUI是一样的,只是名称不同而已。emWin是德国SEGGER公司一个嵌入式GUI图形库,GUI图形库的概念就好像它是一个平台,我们只需要在这个平台上通过其提供的方法写自己的用户界面应用程序就行,非常简单、便捷。如果没有这个GUI图形库,我们的应用程序还需要考虑按键、编辑框、下拉菜单等控件的绘制,以及控件各种功能的实现,还需要管理各个控件、窗口、页面它们之间的相互关系,还需要做触摸屏/鼠标/键盘的管理等等,这是非常麻烦而且容易出错的事情;如果使用emWin,这些事情都是由emWin去处理的,所有的功能基本上是通过调用API函数完成。 因为emWin的用户应用程序结构分明,开始学习emWin最好的方法是先掌握它的界面应用程序的结构;所有的emWin界面应用程序,对于每个页面,都是由三部分组成:(1)控件结构体数组 (2)回调函数(3) 页面创建函数;另外补充三个元素:(1)控件句柄 (2)控件ID (3)消息。 static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =//控件结构体数组 { 控件(ID_0) 控件(ID_1) ...... 控件(ID_x) }; static void _cbDialog(WM_MESSAGE* pMsg)//回调函数 { case WM_PAINT://窗口重绘消息,这个比较难说明白,反正在Framewin或Window窗口之中我们一般是用控 //件,如果要在Framewin或Window窗口之中显示文字或绘制直线、矩形、圆等在这里实现 ...... case WM_INIT_DIALOG://初始化消息,创建窗口/控件时有效,比如在这里设置一些控件的初始参数 ...... case WM_NOTIFY_PARENT://操作触发消息处理(操作屏幕程序会跑到这里),比如点击按键、点击编辑框(任何的操作)等等...... ...... } 句柄= GUI_CreateDialogBox(控件结构体数组, 回调函数, 父窗口句柄); //页面创建函数,返回该页面句柄 (1)控件结构体数组包含一个页面的全部使用到的控件。 (2)每个页面都对应一个回调函数,反正界面的任何操作都在这个回调函数里面用程序处理。 (3)每个页面或控件都对应一个句柄,通过句柄和ID可以找到和管理任何的页面或控件,子父窗口/控件是从属关系。 刚开始接触emWin,千万不要去研究怎么移植驱动或者研究emWin的工作机理,只管用C语言去做界面就好;可以买个STM32+320*240液晶屏的开发板,也可以不买STM32开发板只在emWin脱机模拟仿真开发平台(VC或CodeBlocks)上写界面程序,不要怀疑在emWin模拟开发平台上写的界面程序在STM32上运行不了,100%不用修改直接能跑!只有一个地方需要考虑的是:STM32和emWin模拟开发平台的内存RAM大小是不一样的,STM32的RAM不够的话emWin界面程序是跑不起来的。 要做到快速开发emWin界面程序,一定要借助脱机模拟仿真开发平台(VC或CodeBlocks)在电脑上先做好界面,如果直接在STM32开发环境直接做界面,加上对emWin不熟悉,不断下载测试将花费非常非常多的时间! 开始时可以借助emWin的配套工具GUIBuilder做界面然后生成C代码,通过阅读生成的C代码去掌握emWin界面应用程序的框架和编程方法;但GUIBuilder功能比较弱智,因此只能设计一个初步的界面;其实emWin真正强大的地方是通过C语言和API函数实现千变万化的界面,当你熟悉其C语言界面编程方法之后(事实上emWin界面编程是比较简单的),你就会觉得原来做个界面如此简单! 1.需要安装的软件: (1) emWin脱机模拟仿真软件:codeblocks-13.12mingw-setup(”软件/资料下载”栏目可下载) (2) 下载并解压emWin模拟器版本:SeggerEval_WIN32_MSVC_MinGW_GUI_V528(”软件/资料下载”栏目可下载) 2. 运行emWin自带的DEMO程序 (1) 解压SeggerEval_WIN32_MSVC_MinGW_GUI_V528之后用CodeBlocks打开工程工程文件:SimulationTrial.cbp然后编译工程:
(2) 运行emWin自带的DEMO程序:
完了,是不是特别简单?
|