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();
	}

posted on 2014-09-30 11:49  Worldsing  阅读(939)  评论(0编辑  收藏  举报