⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guidemo.c

📁 uc-gui.rar
💻 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        : GUIDEMO.cPurpose     : Several GUIDEMO routines----------------------------------------------------------------------*/#include <stddef.h>#include "GUI.h"#include "Progbar.h"#include "LISTBOX.h"#include "FrameWin.h"#include "BUTTON.H"#include "GUIDEMO.H"/***********************************************************************       Static variables************************************************************************/#if GUI_WINSUPPORT  static BUTTON_Handle   _ahButton[2];  static FRAMEWIN_Handle _ahFrameWin[2];  static FRAMEWIN_Handle _ahInfoWin[2];  static int             _FrameWinPosX[2],  _FrameWinPosY[2];  static int             _FrameWinSizeX[2], _FrameWinSizeY[2];  static int             _ButtonSizeX,      _ButtonSizeY;#endifstatic int         _iTest, _iTestMinor;static char        _CmdNext;static const char* _sInfo;static const char* _sExplain;#define countof(Obj) (sizeof(Obj)/sizeof(Obj[0]))/***********************************************************************       Routine table***********************************************************************  The routines to be called are listed here. The advantage to calling  directly is that we can execute some code before and after.*/typedef void fVoidVoid(void);static fVoidVoid * _apfTest[] = {  GUIDEMO_HardwareInfo,  GUIDEMO_Speed,  #if GUI_SUPPORT_MEMDEV    GUIDEMO_Graph,  #endif  GUIDEMO_Bitmap,  GUIDEMO_ShowInternationalFonts,  GUIDEMO_Dialog,  GUIDEMO_ShowColorBar,  GUIDEMO_ShowColorList,  GUIDEMO_DemoLUT,  GUIDEMO_DemoPolygon,  GUIDEMO_Circle,  GUIDEMO_ShowMemoryDevice,  GUIDEMO_Automotive,  GUIDEMO_Navigation,                   #if GUI_WINSUPPORT    GUIDEMO_DemoProgBar,    GUIDEMO_DemoFrameWin,    #if GUI_SUPPORT_TOUCH      GUIDEMO_Touch,    #endif  #endif  0  };/***********************************************************************       Static routines************************************************************************/static void _UpdateCmdWin(void) {  #if GUI_WINSUPPORT && GUIDEMO_LARGE    /* Update info in command window */    WM_HWIN hWin;    GUI_CONTEXT ContextOld;    GUI_SaveContext(&ContextOld);    hWin = WM_SelectWindow(_ahInfoWin[1]);    GUI_SetDefault();    GUI_SetBkColor(GUI_GRAY);    GUI_Clear();    GUI_DispStringAt("Demo ", 0, 0);    GUI_DispDecMin(_iTest + 1);    GUI_DispString(".");    GUI_DispDecMin(_iTestMinor);    GUI_DispString("/");    GUI_DispDecMin(countof(_apfTest));    WM_SelectWindow(hWin);    GUI_RestoreContext(&ContextOld);  #endif}static void _UpdateInfoWin(void) {  #if GUI_WINSUPPORT && GUIDEMO_LARGE    GUI_RECT rClient;    WM_HWIN hWin;    GUI_CONTEXT ContextOld;    GUI_SaveContext(&ContextOld);    /* Update info  window */    WM_ShowWindow(_ahInfoWin[0]);    WM_ShowWindow(_ahFrameWin[0]);    hWin = WM_SelectWindow(_ahInfoWin[0]);    GUI_GetClientRect(&rClient);    GUI_SetBkColor(GUI_WHITE);    GUI_Clear();    GUI_SetColor(GUI_BLACK);    GUI_SetFont(&GUI_Font13_1);    GUI_SetTextAlign(GUI_TA_HCENTER);    GUI_DispStringHCenterAt(_sInfo, (rClient.x1 - rClient.x0) / 2, 0);    GUI_SetTextAlign(GUI_TA_LEFT);    GUI_SetFont(&GUI_Font8_ASCII);    GUI_DispStringAt(_sExplain, 0, 20);    WM_SelectWindow(hWin);    GUI_RestoreContext(&ContextOld);  #endif}/***********************************************************************       Exported routines************************************************************************/int GUIDEMO_Delay(int t) {  int r = 0;  #if GUI_WINSUPPORT    int tRem, tEnd = GUI_GetTime() + t;    PROGBAR_Handle hProg;    WM_SetForegroundWindow(_ahButton[0]);    hProg = (t >100) ? PROGBAR_Create(_FrameWinPosX[1]  + 10,                                      _FrameWinPosY[1]  + 25,                                      _FrameWinSizeX[1] - 20,                                      7,                                      WM_CF_SHOW|WM_CF_STAYONTOP) : 0;    #if GUI_SUPPORT_MEMDEV      PROGBAR_EnableMemdev(hProg);      #endif    PROGBAR_SetMinMax(hProg, 0, t);    for (; tRem = tEnd - GUI_GetTime(), (tRem > 0) && !GUIDEMO_CheckCancel();) {      PROGBAR_SetValue(hProg, t - tRem);      WM_ExecIdle();      GUI_Delay(10);    }    PROGBAR_Delete(hProg);    _UpdateCmdWin();    WM_ExecIdle();  #else    GUI_Delay(t);  #endif  return r;}void GUIDEMO_Wait(void) {  GUIDEMO_Delay(4000);  GUIDEMO_NotifyStartNext();}int GUIDEMO_CheckCancel(void) {  int c = GUI_GetKey();  #if GUI_WINSUPPORT    WM_ExecIdle();  #endif  if ((c == 'n') || (c=='N'))    _CmdNext =1;  if ((c == 's') || (c=='S')) {    GUI_Delay(500);    do {      GUI_Delay(10);      #if GUI_WINSUPPORT        WM_ExecIdle();      #endif      c = GUI_GetKey();    } while (!c);  }  return _CmdNext;}void GUIDEMO_ShowInfo(const char* s) {  _sExplain = s;  _UpdateInfoWin();}void GUIDEMO_HideInfoWin(void) {  #if GUI_WINSUPPORT    WM_HideWindow(_ahFrameWin[0]);  #endif}void GUIDEMO_NotifyStartNext(void) {  _CmdNext = 0;  _UpdateCmdWin();  _iTestMinor++;}int GUIDEMO_WaitKey(void) {  int r = 0;  int tMax = GUI_GetTime() + 4000;  int tDiff;   #if GUI_WINSUPPORT    PROGBAR_Handle hProg = PROGBAR_Create(LCD_GetXSize() - 70,                                           LCD_GetYSize() - 40,                                           80, 5, WM_CF_SHOW);  #endif  while (tDiff = tMax-GUI_GetTime(), (tDiff > 0) && !GUIDEMO_CheckCancel()) {    if ((r = GUI_GetKey()) != 0)      break;  }  #if GUI_WINSUPPORT    PROGBAR_Delete(hProg);    WM_ExecIdle();  #endif  return r;}void GUIDEMO_ShowIntro(const char * s, const char * sExp) {  GUI_CONTEXT ContextOld;  GUI_SaveContext(&ContextOld);  _sInfo = s;  _sExplain = sExp;  GUI_SetDefault();  GUIDEMO_HideInfoWin();  GUI_SetBkColor(GUI_BLUE);  GUI_SetColor(GUI_WHITE);  GUI_Clear();  GUI_SetFont(&GUI_FontComic18B_ASCII);  GUI_DispStringHCenterAt(s, LCD_GET_XSIZE() / 2, LCD_GET_YSIZE() / 3 - 10);  if (_sExplain) {    GUI_SetFont(&GUI_Font8_ASCII);    GUI_DispStringHCenterAt(_sExplain, LCD_GET_XSIZE() / 2, LCD_GET_YSIZE() / 2 - 10);  }  GUIDEMO_Delay(_sExplain ? 2000 : 4000);#if GUI_WINSUPPORT  _UpdateInfoWin();  _UpdateCmdWin();#endif  GUI_RestoreContext(&ContextOld);  #if GUI_WINSUPPORT    WM_ExecIdle();  #endif  GUIDEMO_NotifyStartNext();  GUI_SetBkColor(GUI_RED);  GUI_Clear();}/***********************************************************************       GUIDEMO_main(): Complete Demo************************************************************************/#if GUIDEMO_LARGEvoid GUIDEMO_main(void) {  #if GUI_WINSUPPORT    int i;  #endif  GUI_Clear();  #if GUI_WINSUPPORT    WM_SetCreateFlags(WM_CF_MEMDEV);  /* Automatically use memory devices on all windows */    /* Calculate position and size of FrameWin[1] */    _FrameWinSizeX[1] = 80;    _FrameWinSizeY[1] = 60;    _FrameWinPosX[1] = LCD_GetXSize() - _FrameWinSizeX[1];    _FrameWinPosY[1] = LCD_GetYSize() - _FrameWinSizeY[1];    _ButtonSizeX = (_FrameWinSizeX[1] - 20) / 2;    _ButtonSizeY = 20;    /* Create the control window incl. buttons */    _ahFrameWin[1] = FRAMEWIN_Create("Control", NULL, WM_CF_SHOW | WM_CF_STAYONTOP,                                     _FrameWinPosX[1], _FrameWinPosY[1],                                     _FrameWinSizeX[1], _FrameWinSizeY[1]);    _ahInfoWin[1] = WM_CreateWindowAsChild(0, 0, 0, 0, _ahFrameWin[1],                                            WM_CF_SHOW | WM_CF_STAYONTOP, 0, 0);    _ahButton[0] = BUTTON_CreateAsChild(_FrameWinSizeX[1] / 20,                                 + 20, _ButtonSizeX, _ButtonSizeY, _ahFrameWin[1],                                  'H' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);    _ahButton[1] = BUTTON_CreateAsChild(_FrameWinSizeX[1] / 2,                                 + 20, _ButtonSizeX, _ButtonSizeY, _ahFrameWin[1],                                  'N' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);    BUTTON_SetText(_ahButton[0], "Stop");    BUTTON_SetText(_ahButton[1], "Next");    _UpdateCmdWin();    WM_ExecIdle();  #endif  /* Show Intro */  GUIDEMO_Intro();  #if GUI_WINSUPPORT    /* Calculate position and size of FrameWin[0] */    _FrameWinSizeX[0] = LCD_GetXSize() / 2;    _FrameWinSizeY[0] = 65;    _FrameWinPosX[0] = LCD_GetXSize() - _FrameWinSizeX[0];    _FrameWinPosY[0] = 0;    /* Create info window and run the individual demos */    _ahFrameWin[0] = FRAMEWIN_Create("礐/GUI Demo", NULL, WM_CF_STAYONTOP,                                      _FrameWinPosX[0], _FrameWinPosY[0], _FrameWinSizeX[0], _FrameWinSizeY[0]);    _ahInfoWin[0] = WM_CreateWindowAsChild(0, 0, 0, 0, _ahFrameWin[0], WM_CF_STAYONTOP, 0, 0);    WM_ExecIdle();  #endif  /* Run the individual demos !  */  for (_iTest = 0; _apfTest[_iTest]; _iTest++) {    GUI_CONTEXT ContextOld;    GUI_SaveContext(&ContextOld);    _iTestMinor = 0;    _UpdateCmdWin();    (*_apfTest[_iTest])();    _CmdNext = 0;    GUI_RestoreContext(&ContextOld);  }  /* Cleanup */  #if GUI_WINSUPPORT    for (i = 0; i < countof(_ahFrameWin); i++) {      WM_DeleteWindow(_ahFrameWin[i]);    }    for (i = 0; i < countof(_ahInfoWin); i++) {      WM_DeleteWindow(_ahInfoWin[i]);    }  #endif}#else /* GUIDEMO_LARGE */void GUIDEMO_main(void) {  #if GUI_WINSUPPORT    int i;  #endif  #if GUI_WINSUPPORT    WM_SetCreateFlags(WM_CF_MEMDEV);  /* Automatically use memory devices on all windows */    _ButtonSizeX = 27;    _ButtonSizeY = 14;    _ahButton[0] = BUTTON_Create(LCD_GetXSize() - _ButtonSizeX * 2 - 5,                                 LCD_GetYSize() - _ButtonSizeY - 3,                                 _ButtonSizeX, _ButtonSizeY,                                  'H' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);    _ahButton[1] = BUTTON_Create(LCD_GetXSize() - _ButtonSizeX - 3,                                 LCD_GetYSize() - _ButtonSizeY - 3,                                 _ButtonSizeX, _ButtonSizeY,                                  'N' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);    BUTTON_SetFont(_ahButton[0], &GUI_Font8_ASCII);    BUTTON_SetFont(_ahButton[1], &GUI_Font8_ASCII);    BUTTON_SetText(_ahButton[0], "Stop");    BUTTON_SetText(_ahButton[1], "Next");    _UpdateCmdWin();    WM_ExecIdle();  #endif  /* Show Intro */  GUIDEMO_Intro();  /* Run the individual demos !  */  for (_iTest = 0; _apfTest[_iTest]; _iTest++) {    GUI_CONTEXT ContextOld;    GUI_SaveContext(&ContextOld);    _iTestMinor = 0;    _UpdateCmdWin();    (*_apfTest[_iTest])();    _CmdNext = 0;    GUI_RestoreContext(&ContextOld);  }  /* Cleanup */  #if GUI_WINSUPPORT    for (i = 0; i < countof(_ahButton); i++) {      BUTTON_Delete(_ahButton[i]);    }  #endif}#endif /* GUIDEMO_LARGE */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -