📄 widget_header.c
字号:
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* 礐/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : WIDGET_Header.c
Purpose : Demonstrates the use of header widgets
---------------------------END-OF-HEADER------------------------------
*/
#include <stddef.h>
#include <string.h>
#include "GUI.h"
#include "HEADER.h"
#include "FRAMEWIN.h"
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
#define MSG_CHANGE_MAIN_TEXT (WM_USER + 0)
#define MSG_CHANGE_INFO_TEXT (WM_USER + 1)
/*********************************************************************
*
* Static data
*
**********************************************************************
*/
static HEADER_Handle _hHeader;
static char _acMainText[100];
static char _acInfoText[100];
/*********************************************************************
*
* Static code
*
**********************************************************************
*/
/*******************************************************************
*
* _ChangeMainText
*
* Sends a message to the background window and invalidate it, so
* the callback of the background window display the new text.
*/
static void _ChangeMainText(char* pStr) {
WM_MESSAGE Message;
Message.MsgId = MSG_CHANGE_MAIN_TEXT;
Message.Data.p = pStr;
WM_SendMessage(WM_HBKWIN, &Message);
WM_InvalidateWindow(WM_HBKWIN);
}
/*******************************************************************
*
* _ChangeInfoText
*
* Sends a message to the background window and invalidate it, so
* the callback of the background window display the new text.
*/
static void _ChangeInfoText(char* pStr) {
WM_MESSAGE Message;
Message.MsgId = MSG_CHANGE_INFO_TEXT;
Message.Data.p = pStr;
WM_SendMessage(WM_HBKWIN, &Message);
WM_InvalidateWindow(WM_HBKWIN);
}
/*******************************************************************
*
* _cbBkWindow
*/
static void _cbBkWindow(WM_MESSAGE* pMsg) {
switch (pMsg->MsgId) {
case MSG_CHANGE_MAIN_TEXT:
strcpy(_acMainText, pMsg->Data.p);
WM_InvalidateWindow(pMsg->hWin);
break;
case MSG_CHANGE_INFO_TEXT:
strcpy(_acInfoText, pMsg->Data.p);
WM_InvalidateWindow(pMsg->hWin);
break;
case WM_PAINT:
GUI_SetBkColor(GUI_BLACK);
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font24_ASCII);
GUI_DispStringHCenterAt("HEADER Widget - Sample", 160, 5);
GUI_SetFont(&GUI_Font8x16);
GUI_DispStringAt(_acMainText, 5, 40);
GUI_SetFont(&GUI_Font8x8);
GUI_DispStringAt(_acInfoText, 5, 60);
break;
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* _OnPaint
*/
static void _OnPaint(void) {
int xPos = 0;
GUI_RECT Rect;
GUI_SetBkColor(GUI_GRAY);
GUI_Clear();
WM_GetClientRect(&Rect);
Rect.x1 = HEADER_GetItemWidth(_hHeader, 0);
GUI_SetColor(GUI_RED);
GUI_FillRect(Rect.x0, Rect.y0, Rect.x1, Rect.y1);
Rect.x0 = Rect.x1;
Rect.x1 += HEADER_GetItemWidth(_hHeader, 1);
GUI_SetColor(GUI_GREEN);
GUI_FillRect(Rect.x0, Rect.y0, Rect.x1, Rect.y1);
Rect.x0 = Rect.x1;
Rect.x1 += HEADER_GetItemWidth(_hHeader, 2);
GUI_SetColor(GUI_BLUE);
GUI_FillRect(Rect.x0, Rect.y0, Rect.x1, Rect.y1);
}
/*********************************************************************
*
* cbWindow
*/
static void _cbWindow(WM_MESSAGE * pMsg) {
WM_HWIN hWin = pMsg->hWin;
switch (pMsg->MsgId) {
case WM_PAINT:
_OnPaint();
break;
}
WM_DefaultProc(pMsg);
}
/*********************************************************************
*
* _Demo
*/
static void _Demo(void) {
int Key = 0;
int Cnt = 10;
char acInfoText[] = "-- sec to play with header control";
_ChangeInfoText("HEADER_AddItem");
HEADER_AddItem(_hHeader, 100, "Red" , GUI_TA_VCENTER | GUI_TA_HCENTER);
HEADER_AddItem(_hHeader, 0, "Green", GUI_TA_VCENTER | GUI_TA_HCENTER);
HEADER_AddItem(_hHeader, 0, ":-)" , GUI_TA_VCENTER | GUI_TA_HCENTER);
GUI_Delay(750);
_ChangeInfoText("HEADER_SetItemWidth");
HEADER_SetItemWidth(_hHeader, 1, 60);
GUI_Delay(750);
_ChangeInfoText("HEADER_SetItemText");
HEADER_SetItemWidth(_hHeader, 2, 100);
HEADER_SetItemText(_hHeader, 2, "Blue");
GUI_Delay(750);
_ChangeInfoText("HEADER_SetFont");
HEADER_SetFont(_hHeader, &GUI_Font8x8);
GUI_Delay(750);
_ChangeInfoText("HEADER_SetHeight");
HEADER_SetHeight(_hHeader, 50);
GUI_Delay(750);
_ChangeInfoText("HEADER_SetTextColor");
HEADER_SetTextColor(_hHeader, GUI_YELLOW);
GUI_Delay(750);
_ChangeInfoText("HEADER_SetBkColor");
HEADER_SetBkColor(_hHeader, GUI_DARKGRAY);
GUI_Delay(750);
_ChangeInfoText("HEADER_SetTextAlign");
HEADER_SetTextAlign(_hHeader, 0, GUI_TA_HCENTER);
while (!Key && (Cnt > 0)) {
acInfoText[0] = '0' + (Cnt / 10);
acInfoText[1] = '0' + (Cnt-- % 10);
_ChangeInfoText(acInfoText);
GUI_Delay(1000);
Key = GUI_GetKey();
}
}
/*********************************************************************
*
* _DemoHeaderFrameWin
*/
static void _DemoHeaderFrameWin(void) {
FRAMEWIN_Handle hFrameWin;
_ChangeMainText("HEADER control inside a FRAMEWIN");
hFrameWin = FRAMEWIN_Create("Title", _cbWindow, WM_CF_SHOW, 10, 80, 300, 140);
FRAMEWIN_SetActive(hFrameWin, 1);
_hHeader = HEADER_CreateAttached(WM_GetClientWindow(hFrameWin), 1234, 0);
_Demo();
FRAMEWIN_Delete(hFrameWin);
}
/*********************************************************************
*
* _DemoHeaderWin
*/
static void _DemoHeaderWin(void) {
WM_HWIN hWin;
_ChangeMainText("HEADER control inside a window");
hWin = WM_CreateWindow(10, 80, 300, 140, WM_CF_SHOW, _cbWindow, 0);
_hHeader = HEADER_CreateAttached(hWin, 1234, 0);
_Demo();
WM_DeleteWindow(hWin);
}
/*********************************************************************
*
* _DemoHeader
*/
static void _DemoHeader(void) {
_ChangeMainText("HEADER control without parent");
_hHeader = HEADER_Create(10, 80, 300, 0, 0, 1234, WM_CF_SHOW, 0);
_Demo();
HEADER_Delete(_hHeader);
}
/*********************************************************************
*
* MainTask
*
**********************************************************************
*/
void MainTask(void) {
GUI_Init();
WM_EnableMemdev(WM_HBKWIN);
WM_SetCreateFlags(WM_CF_MEMDEV);
WM_SetCallback(WM_HBKWIN, _cbBkWindow);
GUI_CURSOR_Show();
while(1) {
_DemoHeaderFrameWin();
_DemoHeaderWin();
_DemoHeader();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -