ucgui学习笔记
UCGUI是一款嵌入式图形界面软件,由国内的数码视讯公司开发。它支持多种嵌入式平台,包括ARM、MIPS、ColdFire等。本攻略将详细讲解ucgui学习笔记,包括环境搭建、基本使用、控件使用、事件处理等。
环境搭建
在使用ucgui之前,先搭建好相应的开发环境。以下是一个基本的环境搭建步骤:
- 下载ucgui的SDK,解压到地目录。
- 在开发环境中添加ucgui的头文件路径和库文件路径。
- 在项目中添加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来开发嵌入式图形界面应用程序。