首页 > 代码库 > ucGUI例程收藏

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例程收藏