您的位置:

emwin界面设计

一、基本介绍

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应用程序。