亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? listbox.c

?? ucos在ARM9上的移植
?? 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        : LISTBOX.cPurpose     : Multiple choice for emWin GSC---------------------------END-OF-HEADER------------------------------*/#include <stdlib.h>#include <string.h>#include "LISTBOX.h"#include "SCROLLBAR.h"#include "WIDGET.h"#include "GUIDebug.h"#include "GUI_Protected.h"#include "WM_Intern.h"#if GUI_WINSUPPORT/***********************************************************************       Private config defaults************************************************************************//* Support for 3D effects */#ifndef LISTBOX_USE_3D  #define LISTBOX_USE_3D 1#endif/* Define default fonts */#ifndef LISTBOX_FONT_DEFAULT  #define LISTBOX_FONT_DEFAULT &GUI_Font13_1#endif/* Define colors */#ifndef LISTBOX_BKCOLOR0_DEFAULT  #define LISTBOX_BKCOLOR0_DEFAULT GUI_WHITE#endif#ifndef LISTBOX_BKCOLOR1_DEFAULT  #define LISTBOX_BKCOLOR1_DEFAULT GUI_GRAY#endif#ifndef LISTBOX_BKCOLOR2_DEFAULT  #define LISTBOX_BKCOLOR2_DEFAULT GUI_WHITE#endif#ifndef LISTBOX_TEXTCOLOR0_DEFAULT  #define LISTBOX_TEXTCOLOR0_DEFAULT GUI_BLACK#endif#ifndef LISTBOX_TEXTCOLOR1_DEFAULT  #define LISTBOX_TEXTCOLOR1_DEFAULT GUI_BLACK#endif#ifndef LISTBOX_TEXTCOLOR2_DEFAULT  #define LISTBOX_TEXTCOLOR2_DEFAULT GUI_BLACK#endif/***********************************************************************       Object definition************************************************************************/typedef struct {  WIDGET Widget;  I16 Sel;                   /* current selection */  WM_SCROLL_STATE ScrollState;  const GUI_ConstString* ppText;  const GUI_FONT* pFont;  GUI_COLOR aBackColor[3];  GUI_COLOR aTextColor[3];  #if GUI_DEBUG_LEVEL >1    int DebugId;  #endif  } LISTBOX_Obj;/***********************************************************************       Static data************************************************************************/static const GUI_FONT* _pDefaultFont = LISTBOX_FONT_DEFAULT;/***********************************************************************       Macros for internal use************************************************************************/#define LISTBOX_H2P(h) (LISTBOX_Obj*) WM_HMEM2Ptr(h)#if GUI_DEBUG_LEVEL >1  #define OBJECT_ID 0x4C69   /* Magic numer, should be unique if possible */  #define ASSERT_IS_VALID_PTR(p) GUI_DEBUG_ERROROUT_IF(p->DebugId != OBJECT_ID, "EDIT.C: Wrong handle type or Object not init'ed")  #define INIT_ID(p)   p->DebugId = OBJECT_ID  #define DEINIT_ID(p) p->DebugId = 0#else  #define ASSERT_IS_VALID_PTR(p)  #define INIT_ID(p)  #define DEINIT_ID(p)#endif/***********************************************************************       Static routines************************************************************************//***********************************************************************       _GetNumVisItems  Returns:    Number of fully or partially visible items*/static int _GetNumVisItems(LISTBOX_Obj* pObj) {  int FontDist = GUI_GetYDistOfFont(pObj->pFont);  int ysize = WM__GetWindowSizeY(&pObj->Widget.Win);  ysize -= 2*  pObj->Widget.pEffect->EffectSize;  if (FontDist)    return ysize  / FontDist;  return 1;}/***********************************************************************       _GetNumItems  Returns:    Number of fully or partially visible items*/static int _GetNumItems(LISTBOX_Obj* pObj) {  int i;  const GUI_ConstString* ppText = pObj->ppText;  if (ppText) {    for (i=0; *(ppText+i); i++);	  return i;  }  return 0;}static void _SetScrollState(WM_HWIN hWin) {  LISTBOX_Obj* pObj    = LISTBOX_H2P(hWin);  WIDGET__SetScrollState(hWin, &pObj->ScrollState, NULL);}static void _CalcScrollParas(WM_HWIN hWin) {  LISTBOX_Obj* pObj    = LISTBOX_H2P(hWin);  pObj->ScrollState.NumItems = _GetNumItems(pObj);  pObj->ScrollState.PageSize = _GetNumVisItems(pObj);}static void _SetScroll(LISTBOX_Handle hObj, LISTBOX_Obj* pObj, int iScroll) {  pObj->ScrollState.v = iScroll;  _SetScrollState(hObj);}static void _CheckSel(LISTBOX_Handle hObj) {  int Sel;  LISTBOX_Obj* pObj = LISTBOX_H2P(hObj);  Sel = pObj->Sel;  /* Check if we have to scroll up */  if (Sel < pObj->ScrollState.v) {    _SetScroll(hObj, pObj, Sel);  } else {  /* Check if we have to scroll down */    if (Sel > pObj->ScrollState.v + pObj->ScrollState.PageSize -1) {      _SetScroll(hObj, pObj, Sel - (pObj->ScrollState.PageSize -1));    }  }   }static int _Tolower(int Key) {  if ((Key >= 0x41) && (Key <= 0x5a)) {    Key += 0x20;  }  return Key;}static void _SelectByKey(LISTBOX_Handle hObj, int Key) {  int i;  LISTBOX_Obj* pObj = LISTBOX_H2P(hObj);  Key = _Tolower(Key);  for (i = 0; i < _GetNumItems(pObj); i++) {    char c = _Tolower(*(*(pObj->ppText + i)));    if (c == Key) {      LISTBOX_SetSel(hObj, i);      break;    }  }}/***********************************************************************       _Paint*/static void _Paint(LISTBOX_Handle hObj) {  int i;  int Border;  GUI_RECT r;  int FontDistY;  LISTBOX_Obj* pObj = LISTBOX_H2P(hObj);  int NumItems = _GetNumItems(pObj);  const GUI_ConstString* ppText = pObj->ppText;  Border = pObj->Widget.pEffect->EffectSize;  GUI_SetFont(pObj->pFont);  FontDistY = GUI_GetFontDistY();  if (Border) {    GUI_SetBkColor(pObj->aBackColor[0]);    GUI_Clear();  }  /* Calculate rect used for painting (subtract border) */  WM_GetClientRect(&r);  r.x1 -= Border;  r.y1 -= Border;  r.y0 -= Border;  WM_SetUserClipArea(&r);  for (i = pObj->ScrollState.v; i < NumItems; i++) {    int y, ColorIndex;    y = Border + (i - pObj->ScrollState.v) * FontDistY;    if (i == pObj->Sel) {      ColorIndex = (pObj->Widget.State & WIDGET_STATE_FOCUS) ? 2 : 1;    } else {      ColorIndex = 0;    }    GUI_SetBkColor(pObj->aBackColor[ColorIndex]);    GUI_SetColor  (pObj->aTextColor[ColorIndex]);    GUI_ClearRect(Border, y, Border, y + FontDistY -1);    GUI_DispStringAt(*(ppText+i), Border+1, y);    GUI_DispCEOL();  }  WM_SetUserClipArea(NULL);  /* Draw the 3D effect (if configured) */  WIDGET__EFFECT_DrawDown(&pObj->Widget);}/***********************************************************************       _OnTouch*/static int _OnTouch(LISTBOX_Handle hObj, LISTBOX_Obj* pObj, WM_MESSAGE*pMsg) {  int Notification;  int Sel;  GUI_TOUCH_tState* pState = (GUI_TOUCH_tState*)pMsg->Data.p;  int FontDistY = GUI_GetYDistOfFont(pObj->pFont);  if (pMsg->Data.p) {  /* Something happened in our area (pressed or released) */    if (pState->Pressed) {      Sel = pState->y / FontDistY + pObj->ScrollState.v;       WM_SetFocus(hObj);      Notification = WM_NOTIFICATION_CLICKED;      LISTBOX_SetSel(hObj, Sel);    } else {      Notification = WM_NOTIFICATION_RELEASED;    }  } else {     /* Mouse moved out */    Notification = WM_NOTIFICATION_MOVED_OUT;  }  WM_NotifyParent(hObj, Notification);  return 0;                        /* Message handled */}/***********************************************************************       Callback*/static void _LISTBOX_Callback (WM_MESSAGE*pMsg) {  LISTBOX_Handle hObj = pMsg->hWin;  LISTBOX_Obj* pObj = LISTBOX_H2P(hObj);  WM_SCROLL_STATE ScrollState;  /* Let widget handle the standard messages */  if (WIDGET_HandleActive(hObj, pMsg) == 0) {    return;  }  switch (pMsg->MsgId) {  case WM_NOTIFY_PARENT:    if (pMsg->Data.v == WM_NOTIFICATION_VALUE_CHANGED) {      WM_GetScrollState(pMsg->hWinSrc, &ScrollState);    }    pObj->ScrollState.v = ScrollState.v;    WM_InvalidateWindow(hObj);    break;  case WM_ADD_SCROLLBAR:    _SetScrollState(hObj);    break;  case WM_PAINT:    _Paint(hObj);    break;  case WM_TOUCH:    if (_OnTouch(hObj, pObj, pMsg) == 0)      return;    break;  case WM_KEY:    if ( ((WM_KEY_INFO*)(pMsg->Data.p))->PressedCnt >0) {      int Key = ((WM_KEY_INFO*)(pMsg->Data.p))->Key;      switch (Key) {        case GUI_KEY_TAB:          break;                    /* Send to parent by not doing anything */        default:          LISTBOX_AddKey(hObj, Key);          return;      }    }    break;  }  WM_DefaultProc(pMsg);}/***********************************************************************       Exported routines:  Create************************************************************************/LISTBOX_Handle LISTBOX_CreateAsChild(  const GUI_ConstString* ppText,  WM_HWIN hWinParent,  int x0, int y0, int xsize, int ysize, int Flags){  LISTBOX_Handle hObj = WM_CreateWindowAsChild(x0, y0, xsize, ysize,                                                hWinParent, Flags, _LISTBOX_Callback,                                               sizeof(LISTBOX_Obj)-sizeof(WM_Obj));  if (hObj) {    LISTBOX_Obj* pObj   = LISTBOX_H2P(hObj);    /* init widget specific variables */    WIDGET__Init(&pObj->Widget, WIDGET_STATE_FOCUSSABLE | WIDGET_STATE_ENABLED);    /* pObj->ppText = 0; */   /* Zero init not required */    pObj->pFont  = _pDefaultFont;    pObj->aBackColor[0] = 0xffffff;            /* Non selected state */    pObj->aBackColor[1] = LISTBOX_BKCOLOR1_DEFAULT;    /* selected state */    pObj->aBackColor[2] = GUI_BLUE;            /* selected state with focus */    pObj->aTextColor[0] = 0x000000;            /* Non selected state */    pObj->aTextColor[1] = 0xffffff;            /* selected state */    pObj->aTextColor[2] = 0xffffff;            /* selected state with focus */    if (hObj && ppText) {      LISTBOX_Obj* pObj   = LISTBOX_H2P(hObj);      INIT_ID(pObj);      /* init member variables */      /* Check size */      if (!xsize) {        const GUI_FONT* pFontOld = GUI_SetFont(pObj->pFont);        int i;		    for (i=0; *(ppText+i); i++) {          int Size = GUI_GetStringDistX(*(ppText+i));          if (Size>xsize)			      xsize = Size;		    }        GUI_SetFont(pFontOld);	    }      /* Set non-zero attributes */      pObj->ppText = ppText;    }    _CalcScrollParas(hObj);  }  return hObj;}LISTBOX_Handle LISTBOX_Create(                    const GUI_ConstString* ppText,                    int x0, int y0, int xsize, int ysize, int Flags){   return LISTBOX_CreateAsChild(ppText, WM_HWIN_NULL /*hWin*/, x0, y0, xsize, ysize, Flags);}LISTBOX_Handle LISTBOX_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb) {  LISTBOX_Handle  hThis;  GUI_USE_PARA(cb);  hThis = LISTBOX_CreateAsChild(0,                                hWinParent,                                pCreateInfo->x0 + x0,                                 pCreateInfo->y0 + y0,                                 pCreateInfo->xSize,                                 pCreateInfo->ySize,                                 pCreateInfo->Flags);  if (hThis) {    LISTBOX_Obj* pObj = LISTBOX_H2P(hThis);    INIT_ID(pObj);    pObj->Widget.Id     = pCreateInfo->Id;    pObj->Widget.State  = LISTBOX_STATE_INACTIVE;  }  return hThis;}/***********************************************************************       Exported routines:  Various methods************************************************************************/void LISTBOX_AddKey(LISTBOX_Handle hObj, int Key) {  if (hObj) {    WM_LOCK();    switch (Key) {      case GUI_KEY_DOWN:        LISTBOX_IncSel(hObj);        break;      case GUI_KEY_UP:        LISTBOX_DecSel(hObj);        break;      default:        _SelectByKey(hObj, Key);        break;    }    WM_UNLOCK();  }}void LISTBOX_SetText(LISTBOX_Handle hObj, const GUI_ConstString* ppText) {  LISTBOX_Obj* pObj;  if (hObj) {    WM_LOCK();    pObj = LISTBOX_H2P(hObj);    ASSERT_IS_VALID_PTR(pObj);    pObj->ppText = ppText;    _CalcScrollParas(hObj);    LISTBOX_Invalidate(hObj);    WM_UNLOCK();  }}void LISTBOX_SetFont(LISTBOX_Handle hObj, const GUI_FONT* pfont) {  LISTBOX_Obj* pObj;  if (hObj) {    WM_LOCK();    pObj = LISTBOX_H2P(hObj);    ASSERT_IS_VALID_PTR(pObj);    pObj->pFont = pfont;    _CalcScrollParas(hObj);    LISTBOX_Invalidate(hObj);    WM_UNLOCK();  }}void LISTBOX_SetBackColor(LISTBOX_Handle hObj, int index, GUI_COLOR color) {  LISTBOX_Obj* pObj;  if (hObj) {    WM_LOCK();    pObj = LISTBOX_H2P(hObj);    ASSERT_IS_VALID_PTR(pObj);    pObj->aBackColor[index] = color;    LISTBOX_Invalidate(hObj);    WM_UNLOCK();  }}void LISTBOX_SetTextColor(LISTBOX_Handle hObj, int index, GUI_COLOR color) {  LISTBOX_Obj* pObj;  if (hObj) {    WM_LOCK();    pObj = LISTBOX_H2P(hObj);    ASSERT_IS_VALID_PTR(pObj);    pObj->aTextColor[index] = color;    LISTBOX_Invalidate(hObj);    WM_UNLOCK();  }}void LISTBOX_SetSel (LISTBOX_Handle hObj, int Sel) {  int NumItems, MaxSel;  LISTBOX_Obj* pObj;  if (hObj) {    WM_LOCK();    pObj = LISTBOX_H2P(hObj);    ASSERT_IS_VALID_PTR(pObj);    NumItems = _GetNumItems(pObj);    MaxSel = NumItems ? NumItems-1 : 0;    if (Sel>MaxSel) {      Sel = MaxSel;    }    if (Sel != pObj->Sel) {      pObj->Sel = Sel;      LISTBOX_Invalidate(hObj);      WM_NotifyParent(hObj, WM_NOTIFICATION_SEL_CHANGED);    }    _CheckSel(hObj);    WM_UNLOCK();  }}void LISTBOX_IncSel      (LISTBOX_Handle hObj) {  LISTBOX_Obj* pObj = LISTBOX_H2P(hObj);  int Sel = LISTBOX_GetSel(hObj);  pObj = pObj;  ASSERT_IS_VALID_PTR(pObj);  LISTBOX_SetSel(hObj, Sel+1);}void LISTBOX_DecSel      (LISTBOX_Handle hObj) {  int Sel = LISTBOX_GetSel(hObj);  if (Sel)	  Sel--;  LISTBOX_SetSel(hObj, Sel);}int  LISTBOX_GetSel (LISTBOX_Handle hObj) {  int r = 0;  LISTBOX_Obj* pObj;  if (hObj) {    WM_LOCK();    pObj = LISTBOX_H2P(hObj);    ASSERT_IS_VALID_PTR(pObj);    r = pObj->Sel;    WM_UNLOCK();  }  return r;}void LISTBOX_SetDefaultFont(const GUI_FONT* pFont) {  _pDefaultFont = pFont;}const GUI_FONT* LISTBOX_GetDefaultFont(void) {  return _pDefaultFont;}#else                            /* Avoid problems with empty object modules */  void LISTBOX_C(void) {}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜欧美电影在线观看| 欧美三级韩国三级日本一级| 日本道免费精品一区二区三区| 91精品在线观看入口| 国产精品亲子乱子伦xxxx裸| 日本系列欧美系列| 色婷婷久久一区二区三区麻豆| 精品国产一区二区三区忘忧草| 亚洲福利电影网| 97精品电影院| 国产精品亲子乱子伦xxxx裸| 国产精品一区免费视频| 欧美成人一区二区三区片免费| 亚洲一区二区四区蜜桃| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 久久午夜国产精品| 奇米影视在线99精品| 在线亚洲一区二区| 亚洲综合免费观看高清在线观看 | 裸体一区二区三区| 欧美性xxxxx极品少妇| 专区另类欧美日韩| 成人aa视频在线观看| 国产欧美精品在线观看| 国产成人精品三级| 国产偷国产偷亚洲高清人白洁| 精品在线一区二区| 欧美一级二级三级蜜桃| 青草av.久久免费一区| 欧美一区二区不卡视频| 日韩在线观看一区二区| 欧美日本一区二区在线观看| 亚瑟在线精品视频| 欧美综合天天夜夜久久| 亚洲午夜在线视频| 69成人精品免费视频| 日韩av网站免费在线| 欧美一级片在线观看| 麻豆91精品视频| 久久精品免费在线观看| 国产成人av网站| 亚洲黄色片在线观看| 在线一区二区三区四区五区| 舔着乳尖日韩一区| 日韩视频在线你懂得| 国产在线麻豆精品观看| 国产精品免费视频一区| av亚洲精华国产精华| 亚洲午夜一二三区视频| 日韩一区二区三区三四区视频在线观看 | 久久国产精品露脸对白| www国产精品av| 成人美女在线视频| 亚洲网友自拍偷拍| 久久嫩草精品久久久精品| 成人午夜在线视频| 亚洲精品少妇30p| 日韩欧美国产麻豆| 91性感美女视频| 免费高清不卡av| 国产精品福利一区| 欧美一区二区三区四区五区| 国产不卡免费视频| 天堂久久久久va久久久久| 久久免费看少妇高潮| 在线精品视频免费观看| 狠狠色2019综合网| 亚洲国产精品精华液网站| 久久综合久久综合九色| 在线免费不卡视频| 国产精品一区不卡| 亚洲曰韩产成在线| 欧美激情一区二区三区| 6080日韩午夜伦伦午夜伦| 丁香婷婷综合激情五月色| 手机精品视频在线观看| 最新国产精品久久精品| 欧美α欧美αv大片| 在线一区二区观看| 成人h动漫精品一区二区| 免费一级欧美片在线观看| 亚洲精品国产第一综合99久久| 久久精子c满五个校花| 欧美情侣在线播放| 91浏览器打开| 国产成人精品综合在线观看| 美女视频第一区二区三区免费观看网站 | 午夜视频一区在线观看| 国产精品久线在线观看| 久久先锋影音av鲁色资源网| 91精品在线一区二区| 欧美网站大全在线观看| 91免费看片在线观看| 国产精品一区二区果冻传媒| 久色婷婷小香蕉久久| 亚洲高清不卡在线| 一区二区免费视频| 专区另类欧美日韩| 中文字幕在线不卡国产视频| 久久精品一区二区三区不卡 | 日韩视频一区二区三区 | 久久青草欧美一区二区三区| 欧美一区二区三区视频免费播放| 91国偷自产一区二区三区成为亚洲经典| 国产成人精品一区二| 久久激情五月婷婷| 久久99精品视频| 精久久久久久久久久久| 紧缚奴在线一区二区三区| 久久成人免费网站| 国产一区 二区 三区一级| 久久99久久99精品免视看婷婷| 久久精品久久综合| 久久精品国产一区二区| 老司机免费视频一区二区| 久久成人免费网站| 国产伦精品一区二区三区免费迷| 国产精品亚洲专一区二区三区| 国产一区二区三区免费看 | 国产拍欧美日韩视频二区| 久久婷婷综合激情| 欧美经典一区二区| 中文字幕一区二区三区不卡| 国产精品国产三级国产三级人妇 | 3d成人h动漫网站入口| 91精品国产91热久久久做人人| 欧美一区二区三区婷婷月色| 欧美成人aa大片| 国产无人区一区二区三区| 国产精品网曝门| 亚洲黄色小视频| 日韩avvvv在线播放| 韩国女主播成人在线| 成人18视频在线播放| 91美女精品福利| 777午夜精品视频在线播放| wwwwxxxxx欧美| 亚洲图片欧美激情| www.在线成人| 国产精品嫩草影院com| 日本精品视频一区二区| 色综合久久88色综合天天免费| 成人va在线观看| 日本大香伊一区二区三区| 欧美日韩在线三级| 7777精品伊人久久久大香线蕉超级流畅| 欧美一区在线视频| 欧美激情一区二区三区四区| 亚洲人成精品久久久久久 | 欧美丝袜自拍制服另类| 欧美日韩国产色站一区二区三区| 欧美成人艳星乳罩| 国产精品久久一级| 亚洲一级电影视频| 国产精品影视天天线| 欧美午夜精品久久久久久孕妇| 精品99一区二区三区| 一区二区三区成人| 国产一区二区福利| 91精品国产综合久久久久久漫画| 国产日韩欧美精品综合| 日一区二区三区| 99精品偷自拍| 久久综合丝袜日本网| 亚洲一区二区三区小说| 国产乱码精品1区2区3区| 在线视频欧美区| 国产日韩欧美一区二区三区乱码| 亚洲成人激情社区| 91在线观看视频| 国产欧美视频一区二区三区| 亚洲午夜私人影院| 不卡视频在线看| 久久综合久久鬼色中文字| 午夜欧美电影在线观看| 91尤物视频在线观看| 欧美国产一区在线| 国产精品一区二区久激情瑜伽 | 99久久精品国产精品久久| 欧美tk—视频vk| 亚洲一区二区高清| 色天天综合色天天久久| 国产精品麻豆久久久| 国产美女一区二区| 欧美精品一区二区三区蜜桃| 天天色天天爱天天射综合| 日本伦理一区二区| 夜夜爽夜夜爽精品视频| www.亚洲激情.com| 中文字幕一区二区日韩精品绯色| 国产黄色91视频| 国产精品午夜春色av| 成人在线视频首页| 中文字幕一区二区在线播放| 国产成人免费视| 国产亚洲一二三区| 成人a免费在线看| 最新久久zyz资源站| 97精品久久久午夜一区二区三区| 国产精品家庭影院|