ucgui学习笔记

  • Post category:other

ucgui学习笔记

UCGUI是一款嵌入式图形界面软件,由国内的数码视讯公司开发。它支持多种嵌入式平台,包括ARM、MIPS、ColdFire等。本攻略将详细讲解ucgui学习笔记,包括环境搭建、基本使用、控件使用、事件处理等。

环境搭建

在使用ucgui之前,先搭建好相应的开发环境。以下是一个基本的环境搭建步骤:

  1. 下载ucgui的SDK,解压到地目录。
  2. 在开发环境中添加ucgui的头文件路径和库文件路径。
  3. 在项目中添加ucgui的库文件。

基本使用

以下是一个基本的ucgui应用程序示例:

#include "GUI.h"

int main(void)
{
    GUI_Init    GUI_SetBkColor(GUI_RED);
    GUI_Clear();
    GUI_SetColor(GUI_WHITE);
    GUI_SetFont(&GUI_Font24_ASCII);
    GUI_DispStringAt("Hello World!", 0, 0);
    while (1) {}
}

在上述代码中,我们首先调用GUI_Init()函数来初始化ucgui。然后,我们设置背景颜色为红色,清空屏幕。接着,我们设置前景颜色为白色,字体为24号ASCII字体,并在屏幕上显示“Hello World!”。最后,我们进入一个死循环,使程序一直运行。

控件使用

ucgui提供了多种控件,包括按钮、文本框、列表框等。以下是一个按钮控件示例:

#include "GUI.h"

void ButtonCallback(WM_MESSAGE *pMsg)
{
    (pMsg->MsgId)
    {
        case WM_PAINT:
            BUTTON_DrawSkinFlex(pMsg->hWin);
            break;
        case WM_NOTIFY_PARENT:
            if (pMsg->Data.v == WM_NOTIFICATION_RELEASED)
            {
                if (pMsg->hWinSrc == button)
                {
                    GUI_DispStringAt("Button Clicked!", 0, 50);
                }
            }
            break;
        default:
            WM_DefaultProc(pMsg);
            break;
    }
}

int main(void)
{
    GUI_Init();
    BUTTON_Handle button = BUTTON_CreateEx(10, 10, 80, 40, 0, WM_CF_SHOW, 0, 1);
    BUTTON_SetText(button, "Click Me");
    WMCallback(button, ButtonCallback);
    while (1) {}
}

在上述代码中,我们首先创建了一个按钮控件,并设置其位置、大小、文本等属性。然后,我们使用`WM_SetCallback函数来设置按钮的回调函数。在回调函数中,我们处理按钮的绘制和点击事件。当按钮被点击时,我们在屏幕上显示“Button Clicked!”。

事件处理

ucgui支持多种事件,包括按键事件、触摸屏事件等。以下是一个按键事件处理示例:

#include "GUI.h"

void KeyCallback(int key)
{
    switch (key)
    {
        case GUI_KEY_ENTER:
            GUI_DispStringAt("Enter Key Pressed!", 0, 50);
            break;
        case GUI_KEY_BACKSPACE:
            GUI_DispStringAt("Backspace Key Pressed!", 0, 50);
            break;
        default:
            break;
    }
}

int main(void)
{
    GUI_Init();
    GUI_SetKeyCallback(KeyCallback);
    while (1) {}
}

在上述代码中,我们使用GUI_SetKeyCallback()函数来设置按键事件的回调函数。在回调函数中,我们根据按下的按键类型,在屏幕上相应的信息。

示例1:使用ucgui实现一个简单的计算器

以下是一个使用ucgui实现的简单计算器示例:

#include "GUI.h"

static WM_HWIN hWin;

void ButtonCallback(WM_MESSAGE *pMsg)
    switch (pMsg->MsgId)
    {
        case WM_PAINT:
            BUTTON_DrawSkinFlex(pMsg->hWin);
            break;
        case WM_NOTIFY_PARENT:
            if (pMsg->Data.v == WM_NOTIFICATION_RELEASED)
            {
                if (pMsg->hWinSrc == BUTTON_CreateEx(10, 10, 40, 40, 0, WM_CF_SHOW, 0, 1))
                {
                    GUI_DispStringAt("1", 0, 50);
                }
                else if (pMsg->hWinSrc == BUTTON_CreateEx(60, 10, 40, 40, 0, WM_CF_SHOW, 0, 2))
                {
                    GUI_DispStringAt("2", 0, 50);
                }
                else if (pMsg->hWinSrc == BUTTON_CreateEx(110, 10, 40, 40, 0, WM_CF_SHOW, 0, 3))
                {
                    GUI_DispStringAt("3", 0, 50);
                }
                else if (pMsg->hWinSrc == BUTTON_CreateEx(10, 60, 40, 40, 0, WM_CF_SHOW, 0, ))
                {
                    GUI_DispStringAt("4", 0, 50);
                }
                else if (pMsg->hWinSrc == BUTTON_CreateEx(60, 60, 40, 40, 0, WM_CF_SHOW, 0, 5))
                {
                    GUI_DispStringAt("5", 0, 50);
                }
                else if (pMsg->hWinSrc == BUTTON_CreateEx(110, 60, 40, 40, 0, WM_CF_SHOW, 0, 6))
                {
                    GUI_DispStringAt("6", 0, 50);
                }
                else if (pMsg->hWinSrc == BUTTON_CreateEx(10, 110, 40, 40, 0, WM_CF_SHOW, 0, 7))
                {
                    GUI_DispStringAt("7", 0, 50);
                }
                else if (pMsg->hWinSrc == BUTTON_CreateEx(60, 110, 40, 40, , WM_CF_SHOW, 0, 8))
                {
                    GUI_DispStringAt("8", 0, 50);
                }
                else if (pMsg->hWinSrc == BUTTON_CreateEx(110, 110, 40, 40, 0, WM_CF_SHOW, 0, 9))
                {
                    GUI_DispStringAt("9", 0, 50);
                }
                else if (pMsg->hWinSrc == BUTTON_CreateEx(60, 160, 40, 40, 0, WM_CF_SHOW, 0, 0))
                {
                    GUI_DispStringAt("0", 0, 50);
                }
                else if (pMsg->hWinSrc == BUTTON_CreateEx(10, 160, 40, 40, 0, WM_CF_SHOW, 0, 10))
                {
                    GUI_DispStringAt("+", 0, 50);
                }
                else if (pMsg->hWinSrc == BUTTON_CreateEx(60, 210, 40, 40, 0, WM_CF_SHOW, 0, 11))
                {
                    GUI_DispStringAt("-", 0, 50);
                }
                else if (pMsg->hWinSrc == BUTTON_CreateEx(110, 160, 40, 90, 0, WM_CF_SHOW, 0, 12))
                {
                    GUI_DispStringAt("=", 0, 50);
                }
            }
            break;
        default:
            WM_DefaultProc(pMsg);
            break;
    }
}

int main(void)
{
    GUI_Init();
    hWin = WM_CreateWindow(0, 0, 160, 240, WM_CF_SHOW, NULL);
    BUTTON_CreateEx(10, 10, 40, 40, hWin, WM_CF_SHOW, 0, 1);
    BUTTON_CreateEx(60, 10, 40, 40 hWin, WM_CF_SHOW, 0, 2);
    BUTTON_CreateEx(110, 10, 40, 40, hWin, WM_CF_SHOW, 0, 3);
    BUTTON_CreateEx(10, 60, 40, , hWin, WM_CF_SHOW, 0, );
    BUTTON_CreateEx(60, 60, 40, 40, hWin, WM_CF_SHOW, 0, 5);
    BUTTON_CreateEx(110, 60, 40, 40, hWin, WM_CF_SHOW, 0, 6);
    BUTTON_CreateEx(10, 110, 40, , hWin, WM_CF_SHOW, 0, 7);
    BUTTON_CreateEx(60, 110, 40, 40, hWin, WM_CF_SHOW, 0, 8);
    BUTTON_CreateEx(110, 110, 40, 40, hWin, WM_CF_SHOW, 0, 9);
    BUTTON_CreateEx(60, 160, 40,40, hWin, WM_CF_SHOW, 0, 0);
    BUTTON_CreateEx(10, 160, 40, 40, hWin, WM_CF_SHOW, 0, 10);
    BUTTON_CreateEx(60, 210, 40, 40, hWin WM_CF_SHOW, 0, 11);
    BUTTON_CreateEx(110, 160, 40, 90, hWin, WM_CF_SHOW, 0, 12);
    WM_SetCallback(hWin, ButtonCallback);
    while (1) {}
}

在上述代码中,我们创建了一个简单的计算界面,包括数字按钮、加减号按钮和等号按钮。我们使用BUTTON_CreateEx()函数来创建按钮控件,并设置其位置、大小、文本等属性。我们使用WM_SetCallback()函数来设置按钮的回调函数。在回调函数中,我们根据按钮的ID,在屏幕显示相应的数字或符号。

示例2:使用ucgui实现一个简单的时钟

以下是一个使用ucgui实现的简单时钟示例:

#include "GUI.h"
#include "RTC.h"

static WM_HWIN hWin;

void TimerCallbackM_MESSAGE *pMsg)
{
    switch (pMsg->MsgId)
    {
        case WM_PAINT:
            GUI_SetColor(GUI_WHITE);
            GUI_SetFont(&GUI_Font24_ASCII);
            GUI_DispStringAt(RTC_GetTimeString(), 0, 0);
            break;
        default:
            WM_DefaultProc(pMsg);
            break;
    }
}

int main(void)
{
    GUI_Init();
    hWin = WM_CreateWindow(0, 0, 160, 240, WM_CF_SHOW, NULL);
    WM_SetCallback(hWin, TimerCallback);
    GUI_TIMER_Create(TimerCallback, 0, 0, 0);
    while (1) {}
}

在上述代码中,我们创建了一个简单的时钟界面。我们使用RTC_GetTimeString()函数来获取当前时间,并在屏幕上显示。我们使用GUI_Create()函数来创建一个定时器,每秒钟触发一次回调函数。在回调函数中,我们更新屏幕上的时间显示。

总结

本攻略介绍了ucgui的学习笔记,包括环境搭建、基本使用、控件使用、事件处理等。我们提供了多个示例代码,分别演示了一个简单的计算器一个简单的时钟的实现。通过本攻略,我们可以了解如何使用ucgui来开发嵌入式图形界面应用程序。