备注:(1)打开工程目录下的"Exe\GUISimulationDebug.exe"即可看到效果。(2)看完教程000~005就基本会用emWin做项目,其他章节可以需要时再参考。
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)上写界面程序