ucGUI例程收藏
ucGUI 几个重要例程Demo
按钮的定制

#include <stddef.h>
#include <string.h> #include "WM.h"
#include "FRAMEWIN.h"
#include "BUTTON.h"
#include "BUTTON_Private.h"
#include "GUI_Protected.h" /*********************************************************************
*
* Static data
*
**********************************************************************
*/ static WM_CALLBACK * _pcbCallback;
static int _Color;
static int _Font;
static int _Pressed; static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "Round button sample", 0, 50, 60, 200, 120, FRAMEWIN_CF_MOVEABLE },
{ BUTTON_CreateIndirect, "Button", GUI_ID_BUTTON0, 100, 10, 80, 80 },
{ BUTTON_CreateIndirect, "Callback", GUI_ID_BUTTON1, 10, 10, 60, 20 },
{ BUTTON_CreateIndirect, "Font", GUI_ID_BUTTON2, 10, 30, 60, 20 },
{ BUTTON_CreateIndirect, "Color", GUI_ID_BUTTON3, 10, 50, 60, 20 },
{ BUTTON_CreateIndirect, "Cancel", GUI_ID_CANCEL, 10, 70, 60, 20 }
}; /*********************************************************************
*
* Static functions
*
**********************************************************************
*/ /*********************************************************************
*
* _OnPaint
*
* Purpose: Paints the owner drawn button
*/
static void _OnPaint(BUTTON_Handle hObj) {
int Index;
char ac[50];
GUI_RECT Rect;
BUTTON_Obj * pObj;
pObj = BUTTON_H2P(hObj);
Index = (WIDGET_GetState(hObj) & BUTTON_STATE_PRESSED) ? 1 : 0;
WM_GetClientRect(&Rect);
/* Draw filled ellipse with button background color */
GUI_SetColor(BUTTON_GetBkColor(hObj, Index));
GUI_FillEllipse(Rect.x1 / 2, Rect.y1 / 2, Rect.x1 / 2, Rect.y1 / 2);
/* Draw black shape */
GUI_SetColor(GUI_BLACK);
GUI_DrawEllipse(Rect.x1 / 2, Rect.y1 / 2, Rect.x1 / 2, Rect.y1 / 2);
/* Draw button text with widget attributes */
GUI_SetColor(BUTTON_GetTextColor(hObj, Index));
GUI_SetBkColor(BUTTON_GetBkColor(hObj, Index));
GUI_SetFont(BUTTON_GetFont(hObj));
BUTTON_GetText(hObj, ac, sizeof(ac));
if (_Pressed) {
strcpy(ac + strlen(ac), "\npressed");
}
GUI_DispStringInRect(ac, &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER);
} /*********************************************************************
*
* _cbButton
*
* Purpose:
* 1. Calls the owner draw function if the WM_PAINT message has been send
* 2. Calls the original callback for further messages
* 3. After processing the messages the function evaluates the pressed-state
* if the WM_TOUCH message has been send
*/
static void _cbButton(WM_MESSAGE *pMsg) {
switch (pMsg->MsgId) {
case WM_PAINT:
_OnPaint(pMsg->hWin);
break;
default:
_pcbCallback(pMsg); /* The original callback */
break;
}
if (pMsg->MsgId == WM_TOUCH) {
if (BUTTON_IsPressed(pMsg->hWin)) {
if (!_Pressed) {
_Pressed = 1;
}
} else {
_Pressed = 0;
}
}
} /*********************************************************************
*
* _cbDialog
*
* Purpose: Dialog callback routine
*/
static void _cbDialog(WM_MESSAGE *pMsg) {
int NCode, Id;
WM_HWIN hDlg;
BUTTON_Handle hButton;
hDlg = pMsg->hWin;
switch (pMsg->MsgId) {
case WM_PAINT:
WM_DefaultProc(pMsg); /* Handle dialog items */
/* After drawing the dialog items add some user drawn items to the window */
GUI_SetPenSize(10);
GUI_SetColor(GUI_GREEN);
GUI_DrawLine( 95, 5, 185, 95);
GUI_SetColor(GUI_RED);
GUI_DrawLine( 95, 95, 185, 5);
break;
case WM_INIT_DIALOG:
hButton = WM_GetDialogItem(hDlg, GUI_ID_BUTTON0);
WM_SetHasTrans(hButton); /* Set transparency flag for button */
break;
case WM_KEY:
switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) {
case GUI_KEY_ESCAPE:
GUI_EndDialog(hDlg, 1);
break;
case GUI_KEY_ENTER:
GUI_EndDialog(hDlg, 0);
break;
}
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */
NCode = pMsg->Data.v; /* Notification code */
switch (NCode) {
case WM_NOTIFICATION_RELEASED: /* React only if released */
hButton = WM_GetDialogItem(hDlg, GUI_ID_BUTTON0);
if (Id == GUI_ID_BUTTON1) { /* Toggle callback */
if (_pcbCallback) {
WM_SetCallback(hButton, _pcbCallback);
_pcbCallback = 0;
} else {
_pcbCallback = WM_SetCallback(hButton, _cbButton);
}
WM_InvalidateWindow(hButton);
}
if (Id == GUI_ID_BUTTON2) { /* Toggle font */
if (_Font) {
BUTTON_SetFont(hButton, &GUI_Font13_1);
} else {
BUTTON_SetFont(hButton, &GUI_Font8x16);
}
_Font ^= 1;
}
if (Id == GUI_ID_BUTTON3) { /* Toggle color */
if (_Color) {
BUTTON_SetBkColor(hButton, 0, 0xaaaaaa);
BUTTON_SetBkColor(hButton, 1, GUI_WHITE);
BUTTON_SetTextColor(hButton, 0, GUI_BLACK);
BUTTON_SetTextColor(hButton, 1, GUI_BLACK);
} else {
BUTTON_SetBkColor(hButton, 0, GUI_BLUE);
BUTTON_SetBkColor(hButton, 1, GUI_RED);
BUTTON_SetTextColor(hButton, 0, GUI_WHITE);
BUTTON_SetTextColor(hButton, 1, GUI_YELLOW);
}
_Color ^= 1;
}
if (Id == GUI_ID_OK) { /* OK Button */
GUI_EndDialog(hDlg, 0);
}
if (Id == GUI_ID_CANCEL) { /* Cancel Button */
GUI_EndDialog(hDlg, 1);
}
break;
}
break;
default:
WM_DefaultProc(pMsg);
}
} /*********************************************************************
*
* MainTask
*
**********************************************************************
*/ void MainTask(void) {
GUI_Init();
/* Use memory devices for all windows */
WM_SetCreateFlags(WM_CF_MEMDEV);
WM_EnableMemdev(WM_HBKWIN);
WM_SetDesktopColor(GUI_GREEN);
while(1) {
_Font = 0;
_Color = 0;
_pcbCallback = 0;
GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbDialog, 0, 0, 0);
GUI_Delay(1000);
}
}
对话框

代码:
static void _cbBkWindow(WM_MESSAGE* pMsg) {
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_SetBkColor(GUI_RED);
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font24_ASCII);
GUI_DispStringHCenterAt("DIALOG_MessageBox - Sample", 160, 5);
break;
default:
WM_DefaultProc(pMsg);
}
}
/*******************************************************************
*
* MainTask
* Demonstrates a message box
*
********************************************************************
*/
void MainTask(void) {
GUI_Init();
WM_SetCallback(WM_HBKWIN, &_cbBkWindow);
/* Create message box and wait until it is closed */
while (1) {
GUI_MessageBox("This text is shown\nin a message box",
"Caption/Title", GUI_MESSAGEBOX_CF_MOVEABLE);
GUI_Delay(750); /* Wait for a short moment ... */
GUI_MessageBox("New message !",
"Caption/Title", GUI_MESSAGEBOX_CF_MOVEABLE);
GUI_Delay(750);
}
}
回调函数(窗口创建)

代码:
#include "GUI.h"
#include "WM.h" /*******************************************************************
*
* static code
*
********************************************************************
*/
/*******************************************************************
*
* _cbBkWindow
*/
static void _cbBkWindow(WM_MESSAGE* pMsg) {
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_ClearRect(0, 50, 319, 239);
default:
WM_DefaultProc(pMsg);
}
} /*******************************************************************
*
* _cbWindow
*/
static void _cbWindow(WM_MESSAGE* pMsg) {
GUI_RECT Rect;
switch (pMsg->MsgId) {
case WM_PAINT:
WM_GetInsideRect(&Rect);
GUI_SetBkColor(GUI_RED);
GUI_SetColor(GUI_YELLOW);
GUI_ClearRectEx(&Rect);
GUI_DrawRectEx(&Rect);
GUI_SetColor(GUI_BLACK);
GUI_SetFont(&GUI_Font8x16);
GUI_DispStringHCenterAt("Foreground window", 75, 40);
break;
default:
WM_DefaultProc(pMsg);
}
} /*******************************************************************
*
* _MoveWindow
*/
static void _MoveWindow(const char* pText) {
WM_HWIN hWnd;
int i;
/* Create foreground window */
hWnd = WM_CreateWindow(10, 50, 150, 100, WM_CF_SHOW, _cbWindow, 0);
GUI_Delay(500);
/* Move foreground window */
for (i = 0; i < 40; i++) {
WM_MoveWindow(hWnd, 2, 2);
GUI_Delay(10);
}
/* Show text before deleting window if we have one */
if (pText) {
GUI_DispStringAt(pText, 5, 50);
GUI_Delay(2500);
}
/* Delete foreground window */
WM_DeleteWindow(hWnd);
WM_Invalidate(WM_HBKWIN);
GUI_Exec();
} /*******************************************************************
*
* _DemoRedraw
*/
static void _DemoRedraw(void) {
WM_CALLBACK* _cbOldBk;
GUI_SetBkColor(GUI_BLACK);
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font24_ASCII);
GUI_DispStringHCenterAt("WM_Redraw - Sample", 160, 5);
GUI_SetFont(&GUI_Font8x16);
while(1) {
/* Move a window over background */
_MoveWindow("Background has not been redrawn");
/* Clear background */
GUI_ClearRect(0, 50, 319, 239);
GUI_Delay(1000);
/* Set callback for background window */
_cbOldBk = WM_SetCallback(WM_HBKWIN, _cbBkWindow);
/* Move a window over background */
_MoveWindow("Background has been redrawn");
/* Delete callback for Background window */
WM_SetCallback(WM_HBKWIN, _cbOldBk);
}
} /*******************************************************************
*
* MainTask
*
* Demonstrates redrawing
*
********************************************************************
*/
void MainTask(void) {
GUI_Init();
_DemoRedraw();
}
ucGUI例程收藏的更多相关文章
- 【资料下载区】【iCore、 iCore2相关资料】更新日期2017/1/11
[新产品发布][iCore2 ARM / FPGA 双核心板] [iCore系列核心板视频教程]之 SDRAM 读写实验[iCore双核心组合是开发板例程][uCGUI 例程及代码包下载][iCore ...
- [stm32][ucos][ucgui] 2、LED闪烁、串口、滑块、文本编辑框简单例程
上一篇:[stm32][ucos] 1.基于ucos操作系统的LED闪烁.串口通信简单例程 * 内容简述: 本例程操作系统采用ucos2.86a版本, 建立了7个任务 任务名 ...
- emWin(ucGui)数值显示例程 -【worldsing笔记】
本例程下载:2.emWin5.26(ucGui)VS2008数字显示.zip 在emWin显示文本字符还是容易,我们也可以使用字符串和标准 C 库的函数来显示数值.然而,有时候这会是件困难的事.通 ...
- stm32——modbus例程网址收藏
https://blog.csdn.net/baidu_31437863/article/details/82178708 STM32(五) Modbus https://blog.csdn.net/ ...
- 【资料分享】 OpenCV精华收藏
OpenCV精华收藏 SkySeraph Dec.29th 2010 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modified Dat ...
- 3.emWin5.26(ucGui)VS2008 2-D图形库-基本绘图【Worldsing笔记】
UCGUI(emWin) 2-D图形库--之基本板绘图,在ucgui的基本绘图功能上来看,功能还是比较全的,本例程主要使用基本的接口,两个主要的概念是绘制(draw)和填充(Fill),这两的区别是一 ...
- emWin 2天速成实例教程000_如何快速入门ucGUI/emWin
备注:(1)打开工程目录下的"Exe\GUISimulationDebug.exe"即可看到效果.(2)看完教程000-005就基本会用emWin做项目,其他章节可以需要时再参考. ...
- (转)linux下和云端通讯的例程, ubuntu和openwrt实验成功(一)
一. HTTP请求的数据流总结#上传数据, yeelink的数据流如下POST /v1.0/device/4420/sensor/9089/datapoints HTTP/1.1Host: api. ...
- h5应用缓存及收藏时Icon显示
h5应用实现离线缓存,加载后,断网仍然可以继续使用. 一.需求 转行做h5,目前做赛道游戏,动手做了个赛道编辑器web版的,由于web版需要开启服务器才能使用,策划要想回家使用就要发布到外网服务器了, ...
随机推荐
- 1205. By the Underground or by Foot?(spfa)
1205 简单题 有一些小细节 两个站可能不相连 但是可以走过去 #include <iostream> #include<cstdio> #include<cstrin ...
- SGU 275 To xor or not to xor (高斯消元)
题目链接 题意:有n个数,范围是[0, 10^18],n最大为100,找出若干个数使它们异或的值最大并输出这个最大值. 分析: 一道高斯消元的好题/ 我们把每个数用二进制表示,要使得最后的异或值最大, ...
- UVa 12096 The SetStack Computer【STL】
题意:给出一个空的栈,支持集合的操作,求每次操作后,栈顶集合的元素个数 从紫书给的例子 A={{},{{}}} B={{},{{{}}}} A是栈顶元素,A是一个集合,同时作为一个集合的A,它自身里面 ...
- 纯css做的安卓开机动画
随着css3的发展,越来越多的负责绚丽的效果可以由纯css来完成了.用css3实现的动画效果丝毫不必js实现的逊色,而且浏览器对css渲染的速度远比js快,大多数时候css的体积也不js小.其中css ...
- 【C#学习笔记】写文件
using System; using System.IO; namespace ConsoleApplication { class Program { static void Main(strin ...
- T-SQL备忘(1):表联接
测试用例表如下: 1.取2个成员表中的交集(A∩B) T-SQL: select Member1.Name,Member1.Age from Member1 join Member2 on Membe ...
- 【Unity3D】自动寻路(Nav Mesh Agent组件)
1.首先添加场景模型 2.为场景模型(寻路路径)添加NavMesh渲染,操作:Windows->Navigation->勾选Navigation Static选项->不勾选Gener ...
- link 参数
-all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possi ...
- Storm的本地运行模式示例
以word count为例,本地化运行模式(不需要安装zookeeper.storm集群),maven工程, pom.xml文件如下: <project xmlns="http://m ...
- c#写入Mysql中文显示乱码 解决方法 z
mysql字符集utf8,c#写入中文后,全部显示成?,一个汉字对应一个? 解决方法:在数据库连接字符串中增加字符集的说明,Charset=utf8,如 MySQLConnection con = n ...