📄 widget_header.c
字号:
/********************************************************************** SEGGER MICROCONTROLLER SYSTEME GmbH ** Solutions for real time microcontroller applications ************************************************************************ ** (c) 2002 SEGGER Microcontroller Systeme GmbH ** ** Internet: www.segger.com Support: support@segger.com ** *************************************************************************** emWin/GSC Grafical user interface for embedded applications ****emWin is protected by international copyright laws. Knowledge of thesource code may not be used to write a similar product. This file mayonly be used in accordance with a license and should not be re-distributed in any way. We appreciate your understanding and fairness.----------------------------------------------------------------------File : WIDGET_Header.cPurpose : 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 + -