一、基本介绍
emwin是一款嵌入式GUI软件包,提供图形化用户界面设计和控制功能。emwin软件包支持多种不同的显示控制器,并具有优秀的可移植性,可以在多种嵌入式设备中使用。
emwin使用C语言编写,具有可扩展性,而且拥有丰富的图形界面元素和图形效果,可以满足绝大部分GUI应用的设计需求。emwin界面设计需要使用emwin的API函数进行实现。
二、基本操作
emwin的基本操作包括初始化、创建窗口、创建控件、设置控件属性、显示控件等。下面是emwin界面设计的一个基本示例代码:
#include "GUI.h" #include "DIALOG.h" int main(void) { //初始化emwin GUI_Init(); //创建窗口 WINDOW_Handle hWin = WINDOW_CreateEx(0, 0, 240, 320, WM_CF_SHOW, 0, 0); //创建按钮控件 BUTTON_Handle hButton = BUTTON_CreateEx(50, 120, 140, 60, hWin, WM_CF_SHOW, 0, 0); //设置按钮文字 BUTTON_SetText(hButton, "Hello, emwin!"); //显示窗口 GUI_Delay(1000); WINDOW_Delete(hWin); return 0; }
这段示例代码实现了创建一个窗口和一个按钮控件,并设置按钮文字。除了按钮控件,emwin还支持很多其它常用控件,如文本、列表、滑块等。
三、控件属性设置
emwin提供了许多API函数用于设置控件属性,如设置背景色、字体、大小等等。下面是一个设置按钮属性的示例:
//设置按钮背景色为红色 BUTTON_SetBkColor(hButton, BUTTON_CI_UNPRESSED, GUI_RED); //设置按钮文字颜色为黄色 BUTTON_SetTextColor(hButton, BUTTON_CI_UNPRESSED, GUI_YELLOW); //设置按钮字体为宋体20号 GUI_SetFont(&GUI_Font20_SimSun);
这段代码用于设置按钮的背景色、文字颜色和字体。其中,BUTTON_CI_UNPRESSED为按钮的未被按下状态,GUI_RED和GUI_YELLOW分别为颜色值。
四、定时器和动画效果
emwin还支持定时器和动画效果。定时器可以用于定时更新界面、延时操作、计时等功能。动画效果可以用于界面过渡、动态效果等。
下面是一个定时器和动画效果的示例代码:
//创建定时器 static void _cbTimer(WM_MESSAGE * pMsg) { int * pId = (int *)pMsg->Data.v; switch (pMsg->MsgId) { case WM_INIT_DIALOG: //启动定时器 WM_CreateTimer(pMsg->hWin, 0, 10, 0); break; case WM_TIMER: if (*pId < 100) { *pId += 2; WM_InvalidateWindow(pMsg->hWin); } break; default: WM_DefaultProc(pMsg); break; } } //绘制动画效果 static void _OnPaint(WM_HWIN hWin) { int yPos = WM_GetWindowSizeY(hWin) - 20; GUI_ClearRect(0, 0, 240, 320); GUI_SetColor(GUI_YELLOW); GUI_FillRect(10, yPos - 100 + xPos / 10, 30, yPos - 80 + xPos / 10); GUI_SetColor(GUI_RED); GUI_FillRect(50, yPos - 80 - xPos / 10, 70, yPos - 60 - xPos / 10); } int main(void) { //初始化emwin GUI_Init(); //创建窗口 WINDOW_Handle hWin = WINDOW_CreateEx(0, 0, 240, 320, WM_CF_SHOW, 0, 0); //创建定时器 int id = 0; WM_CreateWindowAsChild(50, 50, 100, 30, hWin, WM_CF_SHOW | WM_CF_MEMDEV, _cbTimer, sizeof(id)); //绘制动画效果 while (1) { _OnPaint(hWin); GUI_Delay(10); if (++xPos > 390) xPos = 0; } WINDOW_Delete(hWin); return 0; }
这段代码实现了一个在窗口中上下滑动的矩形,并通过定时器和动画效果实现了矩形的动态移动。
五、小结
以上是emwin界面设计涉及的一些基本操作及示例代码。当然,emwin还有很多其它丰富的功能和API函数。emwin界面设计需要综合应用多种功能和API函数,以满足不同GUI应用的设计需求。通过不断学习和实践,可以掌握emwin界面设计的方法和技巧,并实现理想的GUI应用程序。