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

📄 checkbox.c

📁 S3C44B0X在UCOSII的源码
💻 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        : CHECKBOX.cPurpose     : Template for new emWin GSC widgets---------------------------END-OF-HEADER------------------------------*/#include <stdlib.h>#include <string.h>#include "GUI_Private.H"#include "CHECKBOX.h"#include "Widget.h"#if GUI_WINSUPPORT/***********************************************************************       Private config defaults************************************************************************//* Define default fonts */#ifndef CHECKBOX_FONT_DEFAULT  #define CHECKBOX_FONT_DEFAULT &GUI_Font13_1#endif/* Support for 3D effects */#ifndef CHECKBOX_USE_3D  #define CHECKBOX_USE_3D 1#endif/* Define colors */#ifndef CHECKBOX_BKCOLOR0_DEFAULT  #define CHECKBOX_BKCOLOR0_DEFAULT 0x808080           /* Inactive color */#endif#ifndef CHECKBOX_BKCOLOR1_DEFAULT  #define CHECKBOX_BKCOLOR1_DEFAULT GUI_WHITE          /* Active color */#endif#ifndef CHECKBOX_FGCOLOR0_DEFAULT  #define CHECKBOX_FGCOLOR0_DEFAULT 0x101010#endif#ifndef CHECKBOX_FGCOLOR1_DEFAULT  #define CHECKBOX_FGCOLOR1_DEFAULT GUI_BLACK#endif/***********************************************************************       Object definition************************************************************************/typedef struct {  WIDGET Widget;  GUI_COLOR aBkColor[2];  GUI_COLOR aFgColor[2];  #if GUI_DEBUG_LEVEL >1    int DebugId;  #endif  } CHECKBOX_Obj;/***********************************************************************       Static data************************************************************************/static GUI_COLOR _aColor[2];/***********************************************************************       Static const data************************************************************************/static const GUI_LOGPALETTE _PalCheck = {  2,	/* number of entries */  0, 	/* No transparency */  &_aColor[0]};static const unsigned char _acCheck[] = {  XXXXXXXX, XXX_____,  XXXXXXXX, XXX_____,  XXXXXXXX, _XX_____,  XXXXXXX_, _XX_____,  XX_XXX__, _XX_____,  XX__X___, XXX_____,  XX_____X, XXX_____,  XXX___XX, XXX_____,  XXXX_XXX, XXX_____,  XXXXXXXX, XXX_____,  XXXXXXXX, XXX_____};static const GUI_BITMAP _bmCheck = { 11, /* XSize */ 11, /* YSize */ 2, /* BytesPerLine */ 1, /* BitsPerPixel */ _acCheck,  /* Pointer to picture data (indices) */ &_PalCheck  /* Pointer to palette */};/***********************************************************************       Macros for internal use************************************************************************/#define CHECKBOX_ID 0x4544   /* Magic numer, should be unique if possible */#define CHECKBOX_H2P(h) (CHECKBOX_Obj*) WM_H2P(h)#ifdef _DEBUG  #define CHECKBOX_ASSERT_IS_VALID_PTR(p) DEBUG_ERROROUT_IF(p->DebugId != CHECKBOX_ID, "xxx.c: Wrong handle type or Object not init'ed")  #define CHECKBOX_INIT_ID(p)   p->DebugId = CHECKBOX_ID  #define CHECKBOX_DEINIT_ID(p) p->DebugId = CHECKBOX_ID+1#else  #define CHECKBOX_ASSERT_IS_VALID_PTR(p)  #define CHECKBOX_INIT_ID(p)  #define CHECKBOX_DEINIT_ID(p)#endif/***********************************************************************       Static routines************************************************************************//***********************************************************************       _Paint*/static void _Paint(CHECKBOX_Obj* pObj) {  int ColorIndex;  ColorIndex = WIDGET__IsEnabled(&pObj->Widget);  /* Clear inside  ... Just in case */  GUI_SetBkColor (pObj->aBkColor[ColorIndex]);  GUI_Clear();  if (pObj->Widget.State & CHECKBOX_STATE_CHECKED) {    _aColor[1] = pObj->aBkColor[ColorIndex];    _aColor[0] = pObj->aFgColor[ColorIndex];    GUI_DrawBitmap(&_bmCheck, 2, 2);  }  /* Draw the 3D effect (if configured) */  WIDGET__EFFECT_DrawDown(&pObj->Widget);}/***********************************************************************       _OnTouch*/static void _OnTouch(CHECKBOX_Handle hObj, CHECKBOX_Obj* pObj, WM_MESSAGE*pMsg) {  int Notification;  int Hit = 0;  GUI_TOUCH_tState* pState = (GUI_TOUCH_tState*)pMsg->Data.p;  if (pMsg->Data.p) {  /* Something happened in our area (pressed or released) */    if (pState->Pressed) {      if (pObj->Widget.State & WIDGET_STATE_ENABLED) {        pObj->Widget.State ^= CHECKBOX_STATE_CHECKED;        WM_Invalidate(hObj);        Notification = WM_NOTIFICATION_CLICKED;        WM_SetFocus(hObj);      }    } else {      Hit =1;      Notification = WM_NOTIFICATION_RELEASED;    }  } else {    Notification = WM_NOTIFICATION_MOVED_OUT;  }  WM_NotifyParent(hObj, Notification);  if (Hit == 1) {    GUI_DEBUG_LOG("CHECKBOX: Hit\n");    GUI_StoreKey(pObj->Widget.Id);  }}/***********************************************************************       _Callback*/static void _CHECKBOX_Callback (WM_MESSAGE *pMsg) {  CHECKBOX_Handle hObj;  CHECKBOX_Obj* pObj;  hObj = pMsg->hWin;  pObj = CHECKBOX_H2P(hObj);  /* Let widget handle the standard messages */  if (WIDGET_HandleActive(hObj, pMsg) == 0) {    return;  }  switch (pMsg->MsgId) {  case WM_PAINT:    GUI_DEBUG_LOG("CHECKBOX: _Callback(WM_PAINT)\n");    _Paint(pObj);    return;  case WM_TOUCH:    _OnTouch(hObj, pObj, pMsg);    break;  }  WM_DefaultProc(pMsg);}/***********************************************************************       Exported routines:  Create************************************************************************//* Note: the parameters to a create function may vary.         Some widgets may have multiple create functions */CHECKBOX_Handle CHECKBOX_Create (int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int Id, int Flags) {  CHECKBOX_Handle hObj;  /* Create the window */  WM_LOCK();  hObj = WM_CreateWindowAsChild(x0, y0, xsize, ysize, hParent,                                Flags, _CHECKBOX_Callback, sizeof(CHECKBOX_Obj)-sizeof(WM_Obj));  if (hObj) {    CHECKBOX_Obj* pObj = CHECKBOX_H2P(hObj);    /* init widget specific variables */    WIDGET__Init(&pObj->Widget, WIDGET_STATE_FOCUSSABLE | WIDGET_STATE_ENABLED);    pObj->Widget.Id     = Id;    /* init member variables */    CHECKBOX_INIT_ID(pObj);    pObj->aBkColor[0]   = CHECKBOX_BKCOLOR0_DEFAULT;    pObj->aBkColor[1]   = CHECKBOX_BKCOLOR1_DEFAULT;    pObj->aFgColor[0]   = CHECKBOX_FGCOLOR0_DEFAULT;    pObj->aFgColor[1]   = CHECKBOX_FGCOLOR1_DEFAULT;  } else {    GUI_DEBUG_ERROROUT_IF(hObj==0, "CHECKBOX_Create failed")  }  WM_UNLOCK();  return hObj;}CHECKBOX_Handle CHECKBOX_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb) {  CHECKBOX_Handle  hThis;  GUI_USE_PARA(cb);  hThis = CHECKBOX_Create(pCreateInfo->x0 + x0, pCreateInfo->y0 + y0, 15, 15,                          hWinParent, pCreateInfo->Id, pCreateInfo->Flags);  return hThis;}/***********************************************************************       Exported routines:  Various methods************************************************************************/void CHECKBOX_Check(CHECKBOX_Handle hObj) {  WIDGET_OrState(hObj, CHECKBOX_STATE_CHECKED);}void CHECKBOX_Uncheck(CHECKBOX_Handle hObj) {  WIDGET_AndState(hObj, CHECKBOX_STATE_CHECKED);}/***********************************************************************       Exported routines:  Query state************************************************************************//***********************************************************************       CHECKBOX_IsChecked*/int CHECKBOX_IsChecked(CHECKBOX_Handle hObj) {  int r = 0;  CHECKBOX_Obj* pObj;  if (hObj) {    WM_LOCK();    pObj = CHECKBOX_H2P(hObj);    r = (pObj->Widget.State & CHECKBOX_STATE_CHECKED) ? 1 : 0;    WM_UNLOCK();  }  return r;}#endif  /* #if GUI_WINSUPPORT */

⌨️ 快捷键说明

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