一、基本介绍
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应用程序。