zoukankan      html  css  js  c++  java
  • 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), "
    pressed");
      }
      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
    in 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();
    	}
  • 相关阅读:
    HttpModule和在Global.asax区别
    SQL Server中视图的特点与优化
    SQL中int类型与varchar类型的隐式转换
    利用SQL语句查询SQL中所有正在执行的命令
    jquery子窗体操作父窗体中的元素
    js 连接数据库
    典型的列变行,用动态语句来做
    js中with、this的用法
    SQL SERVER数据库状态(脱机,联机,可疑)及SQL设置语句详解
    UVA 10465 Homer Simpson
  • 原文地址:https://www.cnblogs.com/worldsing/p/4001664.html
Copyright © 2011-2022 走看看