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

📄 scrollbar.lst

📁 Keil C下通过的UCGUI,UCGUI的移植源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
                  }
                }
              }
              
              /*********************************************************************
              *
              *       _OnKey
              */
              static void  _OnKey(SCROLLBAR_Handle hObj, WM_MESSAGE*pMsg) {
                WM_KEY_INFO* pKeyInfo;
                int Key;
                pKeyInfo = (WM_KEY_INFO*)(pMsg->Data.p);
                Key = pKeyInfo->Key;
                if (pKeyInfo->PressedCnt > 0) {
                  switch (Key) {
                    case GUI_KEY_RIGHT:
                    case GUI_KEY_DOWN:
                      SCROLLBAR_Inc(hObj);
                      break;                    /* Send to parent by not doing anything */
                    case GUI_KEY_LEFT:
                    case GUI_KEY_UP:
                      SCROLLBAR_Dec(hObj);
                      break;                    /* Send to parent by not doing anything */
                    default:
                      return;
                  }
                }
              }
              
              /*********************************************************************
C51 COMPILER V8.05a   SCROLLBAR                                                            04/11/2008 14:19:38 PAGE 6   

              *
              *       _OnSetScrollState 
              */
              static void _OnSetScrollState(SCROLLBAR_Handle hObj, SCROLLBAR_Obj* pObj, const WM_SCROLL_STATE* pState) {
                pObj->NumItems = pState->NumItems;
                pObj->PageSize = pState->PageSize;
                pObj->v        = pState->v;
                WM_InvalidateWindow(hObj);
              }
              
              
              /*********************************************************************
              *
              *       _SCROLLBAR_Callback
              */
              static void _SCROLLBAR_Callback (WM_MESSAGE *pMsg) {
                SCROLLBAR_Handle hObj;
                SCROLLBAR_Obj* pObj;
                hObj = pMsg->hWin;
                pObj = SCROLLBAR_H2P(hObj);
                /* Let widget handle the standard messages */
                if (WIDGET_HandleActive(hObj, pMsg) == 0) {
                  return;
                }
                switch (pMsg->MsgId) {
                case WM_PAINT:
                  GUI_DEBUG_LOG("SCROLLBAR: _Callback(WM_PAINT)\n");
                  _Paint(pObj);
                  return;
                case WM_TOUCH:
                  _OnTouch(hObj, pObj, pMsg);
                  break;
                case WM_KEY:
                  _OnKey(hObj, pMsg);
                  break;
                case WM_SET_SCROLL_STATE:
                  _OnSetScrollState(hObj, pObj, (const WM_SCROLL_STATE*)pMsg->Data.p);
                  break;
                case WM_GET_SCROLL_STATE:
                  ((WM_SCROLL_STATE*)pMsg->Data.p)->NumItems = pObj->NumItems;
                  ((WM_SCROLL_STATE*)pMsg->Data.p)->PageSize = pObj->PageSize;
                  ((WM_SCROLL_STATE*)pMsg->Data.p)->v        = pObj->v;
                  break;
                }
                WM_DefaultProc(pMsg);
              }
              
              /*********************************************************************
              *
              *       Exported routines:  Create
              *
              **********************************************************************
              */
              
              /* Note: the parameters to a create function may vary.
                       Some widgets may have multiple create functions */
              
              
              SCROLLBAR_Handle SCROLLBAR_Create (int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int Id, int WinF
             -lags, int SpecialFlags) {
                SCROLLBAR_Handle hObj;
                WM_LOCK();
C51 COMPILER V8.05a   SCROLLBAR                                                            04/11/2008 14:19:38 PAGE 7   

                /* Set defaults if necessary */
                if ((xsize == 0) && (ysize == 0)) {
                  GUI_RECT Rect;
                  WM_GetInsideRect(hParent, &Rect);
                  GUI_MoveRect(&Rect, -Rect.x0, -Rect.y0);
                  if (SpecialFlags & SCROLLBAR_CF_VERTICAL) {
                    xsize = _DefaultWidth;
                    x0 = Rect.x1 +1 - xsize;
                    y0 = Rect.y0;
                    ysize = Rect.y1 - Rect.y0 +1;
                  } else {
                    ysize = _DefaultWidth;
                    y0 = Rect.y1 +1 - ysize;
                    x0 = Rect.x0;
                    xsize = Rect.x1 - Rect.x0 +1;
                  }
                }
                /* Create the window */
                hObj = WM_CreateWindowAsChild(x0, y0, xsize, ysize, hParent,
                                     WinFlags, _SCROLLBAR_Callback, sizeof(SCROLLBAR_Obj)-sizeof(WM_Obj));
                if (hObj) {
                  SCROLLBAR_Obj* pObj = SCROLLBAR_H2P(hObj);
                  U16 InitState;
                  /* Handle SpecialFlags */
                  InitState = WIDGET_STATE_ENABLED;
                  if (SpecialFlags & SCROLLBAR_CF_VERTICAL) {
                    InitState |= WIDGET_CF_VERTICAL;
                  }
                  if ((SpecialFlags & SCROLLBAR_CF_FOCUSSABLE) == 0) {
                    InitState |= WIDGET_STATE_FOCUSSABLE;
                  }
                  /* init widget specific variables */
                  WIDGET__Init(&pObj->Widget, InitState);
                  /* init member variables */
                  SCROLLBAR_INIT_ID(pObj);
                  pObj->Widget.Id       = Id;
                  pObj->aBkColor[0]   = SCROLLBAR_BKCOLOR0_DEFAULT;
                  pObj->aBkColor[1]   = SCROLLBAR_BKCOLOR1_DEFAULT;
                  pObj->aColor[0]     = SCROLLBAR_COLOR0_DEFAULT;
                  pObj->aColor[1]     = SCROLLBAR_COLOR1_DEFAULT;
                  pObj->NumItems      = 100;
                  pObj->PageSize      =  10;
                } else {
                  GUI_DEBUG_ERROROUT_IF(hObj==0, "SCROLLBAR_Create failed")
                }
                WM_UNLOCK();
                return hObj;
              }
              
              SCROLLBAR_Handle SCROLLBAR_CreateAttached(WM_HWIN hParent, int SpecialFlags) {
                SCROLLBAR_Handle  hThis;
                int Id;
                Id = (SpecialFlags & SCROLLBAR_CF_VERTICAL) ? GUI_ID_VSCROLL : GUI_ID_HSCROLL;
                hThis = SCROLLBAR_Create(0,0,0,0, hParent, Id, WM_CF_SHOW,         /* WinFlags */
                                         SpecialFlags);
                if (hThis) {
                  WM_NotifyParent(hThis, WM_NOTIFICATION_SCROLLBAR_ADDED);
                }
                return hThis;
              }
              
              SCROLLBAR_Handle SCROLLBAR_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, i
C51 COMPILER V8.05a   SCROLLBAR                                                            04/11/2008 14:19:38 PAGE 8   

             -nt x0, int y0, WM_CALLBACK* cb) {
                SCROLLBAR_Handle  hThis;
                GUI_USE_PARA(cb);
                hThis = SCROLLBAR_Create(pCreateInfo->x0 + x0, pCreateInfo->y0 + y0, pCreateInfo->xSize, pCreateInfo->yS
             -ize,
                                      hWinParent, pCreateInfo->Id, 0, pCreateInfo->Flags);
                return hThis;
              }
              
              /*********************************************************************
              *
              *       Exported routines:  Various methods
              *
              **********************************************************************
              */
              
              
              void SCROLLBAR_Dec(SCROLLBAR_Handle hObj) { SCROLLBAR_AddValue(hObj, -1); }
              void SCROLLBAR_Inc(SCROLLBAR_Handle hObj) { SCROLLBAR_AddValue(hObj,  1); }
              
              void SCROLLBAR_AddValue(SCROLLBAR_Handle hObj, int Add) {
                SCROLLBAR_Obj* pObj;
                if (hObj) {
                  WM_LOCK();
                  pObj = SCROLLBAR_H2P(hObj);
                  SCROLLBAR_SetValue(hObj, pObj->v + Add);
                  WM_UNLOCK();
                }
              }
              
              void SCROLLBAR_SetValue(SCROLLBAR_Handle hObj, int v) {
                SCROLLBAR_Obj* pObj;
                int Max;
                if (hObj) {
                  WM_LOCK();
                  pObj = SCROLLBAR_H2P(hObj);
                  Max = pObj->NumItems - pObj->PageSize;
                  if (Max < 0)
                    Max =0;
                  /* Put in min/max range */
                  if (v < 0) {
                    v = 0;
                  }
                  if (v > Max) {
                    v = Max;
                  }
                  if (pObj->v != v) {
                    pObj->v = v;
                    WM_InvalidateWindow(hObj);
                    WM_NotifyParent(hObj, WM_NOTIFICATION_VALUE_CHANGED);
                  }
                  WM_UNLOCK();
                }
              }
              
              void SCROLLBAR_SetNumItems(SCROLLBAR_Handle hObj, int NumItems) {
                SCROLLBAR_Obj* pObj;
                if (hObj) {
                  WM_LOCK();
                  pObj = SCROLLBAR_H2P(hObj);
                  if (pObj->NumItems != NumItems) {
                    pObj->NumItems = NumItems;
C51 COMPILER V8.05a   SCROLLBAR                                                            04/11/2008 14:19:38 PAGE 9   

                    WM_InvalidateWindow(hObj);
                  }
                  WM_UNLOCK();
                }
              }
              
              void SCROLLBAR_SetPageSize(SCROLLBAR_Handle hObj, int PageSize) {
                SCROLLBAR_Obj* pObj;
                if (hObj) {
                  WM_LOCK();
                  pObj = SCROLLBAR_H2P(hObj);
                  if (pObj->PageSize != PageSize) {
                    pObj->PageSize = PageSize;
                    WM_InvalidateWindow(hObj);
                  }
                  WM_UNLOCK();
                }
              }
              
              void  SCROLLBAR_SetState   (SCROLLBAR_Handle hObj, const WM_SCROLL_STATE* pState) {
                if (hObj) {
                  SCROLLBAR_SetPageSize(hObj, pState->PageSize);
                  SCROLLBAR_SetNumItems(hObj, pState->NumItems);
                  SCROLLBAR_SetValue   (hObj, pState->v);
                }
              }
              
              /*********************************************************************
              *
              *       Query state
              *
              **********************************************************************
              */
              int SCROLLBAR_GetValue(SCROLLBAR_Handle hObj) {
                int r = 0;
                SCROLLBAR_Obj* pObj;
                if (hObj) {
                  WM_LOCK();
                  pObj = SCROLLBAR_H2P(hObj);
                  r = pObj->v;
                  WM_UNLOCK();
                }
                return r;
              }
              
              
              #endif  /* #if GUI_WINSUPPORT */
 531          
 532          
 533          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   ----    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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