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

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

?? listbox.c

?? ucgui源碼3.32
?? C
?? 第 1 頁 / 共 2 頁
字號:
      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:
    switch (pMsg->Data.v) {
    case WM_NOTIFICATION_VALUE_CHANGED:
      WM_GetScrollState(pMsg->hWinSrc, &ScrollState);
      pObj->ScrollState.v = ScrollState.v;
      WM_InvalidateWindow(hObj);
      break;
    case WM_NOTIFICATION_SCROLLBAR_ADDED:
      _SetScrollState(hObj);
      break;
    }
    break;
  case WM_PAINT:
    _Paint(hObj);
    break;
  case WM_TOUCH:
    if (_OnTouch(hObj, pObj, pMsg) == 0)
      return;
    break;
  case WM_DELETE:
    _FreeAttached(pObj);
    break;       /* No return here ... WM_DefaultProc needs to be called */
 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] = LISTBOX_BKCOLOR0_DEFAULT;
    pObj->aBackColor[1] = LISTBOX_BKCOLOR1_DEFAULT;
    pObj->aBackColor[2] = LISTBOX_BKCOLOR2_DEFAULT;
    pObj->aTextColor[0] = LISTBOX_TEXTCOLOR0_DEFAULT;
    pObj->aTextColor[1] = LISTBOX_TEXTCOLOR1_DEFAULT;
    pObj->aTextColor[2] = LISTBOX_TEXTCOLOR2_DEFAULT;
    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 */
      LISTBOX_SetText(hObj, 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_AddString(LISTBOX_Handle hObj, const char* s) {
  int len;
  WM_HMEM hNewItem, hNewBuffer;
  WM_HMEM *pOldBuffer;
  WM_HMEM *pNewBuffer;
  char* sNewString;
  LISTBOX_Obj* pObj;
  if (hObj && s) {
    WM_LOCK();
    pObj = LISTBOX_H2P(hObj);
    len = strlen(s);
    if ((hNewItem = WM_ALLOC(len +1)) ==0) {
      GUI_DEBUG_ERROROUT("LISTBOX_AddString failed to alloc buffer");
    } else {
      /* Add the new item to the buffer */
      if ((hNewBuffer = WM_ALLOC(sizeof(WM_HMEM) * (pObj->NumItems + 1))) == 0) {
        GUI_DEBUG_ERROROUT("LISTBOX_AddString failed to alloc buffer");
        WM_FREE(hNewItem);
      } else {
        pNewBuffer = WM_HMEM2Ptr(hNewBuffer);
        sNewString = WM_HMEM2Ptr(hNewItem);
        strcpy(sNewString, s);
        /* Copy contents of handle buffer (if any) */
        if (pObj->haHandle) {
          pOldBuffer = WM_HMEM2Ptr(pObj->haHandle);
          memcpy(pNewBuffer, pOldBuffer, pObj->NumItems * sizeof(WM_HMEM));
          WM_FREE(pObj->haHandle);
        }
        *(pNewBuffer + pObj->NumItems) = hNewItem;
        pObj->haHandle = hNewBuffer;
        pObj->NumItems++;
      }
    }
    LISTBOX_Invalidate(hObj);
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       LISTBOX_GetNumItems
*/
int LISTBOX_GetNumItems(LISTBOX_Handle hObj) {
  int r = 0;
  LISTBOX_Obj* pObj;
  if (hObj) {
    WM_LOCK();
    pObj = LISTBOX_H2P(hObj);
    ASSERT_IS_VALID_PTR(pObj);
    r = pObj->NumItems;
    WM_UNLOCK();
  }
  return r;
}


void LISTBOX_SetText(LISTBOX_Handle hObj, const GUI_ConstString* ppText) {
  int i;
  const char* s;
  if (hObj) {
    WM_LOCK();
    if (ppText) {
      for (i = 0; (s = *(ppText+i)) != 0; i++) {
        LISTBOX_AddString(hObj, s);
      }
    }
    _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) {
  int Sel = LISTBOX_GetSel(hObj);
  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麻豆精品91久久久久同性| 中文字幕成人网| 日韩电影在线一区二区三区| av亚洲精华国产精华| 久久久夜色精品亚洲| 日韩制服丝袜av| 色菇凉天天综合网| 国产区在线观看成人精品| 麻豆高清免费国产一区| 欧美伊人久久久久久午夜久久久久| 国产日韩欧美一区二区三区乱码| 秋霞成人午夜伦在线观看| 91国产福利在线| 国产精品第13页| 粉嫩欧美一区二区三区高清影视| 日韩精品一区在线| 日韩精品1区2区3区| 在线中文字幕一区二区| 亚洲美女免费在线| www.亚洲免费av| 国产精品五月天| 国产馆精品极品| 亚洲精品在线免费播放| 久久国产人妖系列| 欧美一级片在线看| 麻豆免费精品视频| 欧美白人最猛性xxxxx69交| 日本aⅴ免费视频一区二区三区 | 久久电影网站中文字幕| 欧美精品欧美精品系列| 亚洲成av人片| 欧美日韩一区在线| 亚洲午夜免费电影| 欧美日韩国产成人在线免费| 性欧美疯狂xxxxbbbb| 在线观看精品一区| 亚洲一二三区不卡| 欧美日韩国产欧美日美国产精品| 亚洲一区二区美女| 欧美日韩亚洲另类| 亚洲 欧美综合在线网络| 欧美欧美欧美欧美| 日产国产高清一区二区三区 | 成人精品一区二区三区中文字幕| 国产精品色婷婷| aa级大片欧美| 亚洲精品国产一区二区三区四区在线| 91小视频免费观看| 亚洲午夜久久久久中文字幕久| 欧美性大战久久久久久久| 亚洲成人动漫在线观看| 91精品国产免费| 久久99九九99精品| 欧美国产成人在线| 91美女精品福利| 亚洲电影你懂得| 日韩一级片在线播放| 国内外成人在线| 亚洲国产精品99久久久久久久久| 91视视频在线观看入口直接观看www | 欧美在线视频你懂得| 午夜精品在线看| wwwwxxxxx欧美| 成人黄色国产精品网站大全在线免费观看| 国产精品电影一区二区| 欧美熟乱第一页| 久久99精品视频| 中文字幕一区二区三区不卡| 91国产福利在线| 精品在线一区二区三区| 国产精品午夜在线观看| 欧洲日韩一区二区三区| 免费人成网站在线观看欧美高清| 国产婷婷精品av在线| 91蜜桃网址入口| 日韩电影在线免费| 国产欧美精品一区二区三区四区| 色激情天天射综合网| 另类综合日韩欧美亚洲| 国产精品欧美精品| 精品婷婷伊人一区三区三| 精品一区二区三区不卡| 自拍偷拍国产精品| 91精品国产综合久久小美女| 国产成人精品一区二| 亚洲综合成人在线| 精品99一区二区| 91浏览器入口在线观看| 看电视剧不卡顿的网站| 亚洲欧美在线视频观看| 制服丝袜国产精品| 成人av在线资源| 日韩影院免费视频| 国产精品丝袜久久久久久app| 欧美日韩中文字幕一区| 高清成人免费视频| 丝袜亚洲另类欧美综合| 国产精品女主播av| 日韩一本二本av| 91福利在线看| 国产91丝袜在线播放九色| 午夜影院久久久| 国产精品天干天干在线综合| 欧美一级黄色片| 色婷婷精品久久二区二区蜜臂av | 亚洲一区二区偷拍精品| 久久久久国产精品麻豆ai换脸| 欧美日韩一区二区三区在线| 国产成人av电影| 另类小说一区二区三区| 亚洲永久免费av| 国产精品免费网站在线观看| 欧美精品1区2区| 色婷婷国产精品| 成人国产一区二区三区精品| 另类人妖一区二区av| 亚洲一区二区三区自拍| 中文成人综合网| 精品免费日韩av| 欧美精品日韩综合在线| 日本韩国视频一区二区| 国产69精品久久久久777| 精品在线播放免费| 三级欧美韩日大片在线看| 一区二区三区中文字幕精品精品| 国产女人18毛片水真多成人如厕 | 欧美日韩一区精品| 一本色道久久综合精品竹菊| 国产成人av自拍| 久久草av在线| 免费的成人av| 日韩精品一二三| 亚洲一区二区在线免费看| 亚洲色图在线看| 中文欧美字幕免费| 欧美国产精品久久| 久久综合色综合88| 久久综合久色欧美综合狠狠| 日韩你懂的在线播放| 91精品国产乱| 8v天堂国产在线一区二区| 欧美日韩亚洲综合一区| 欧美色偷偷大香| 欧美亚洲另类激情小说| 色婷婷一区二区| 91久久精品一区二区三| 日本久久电影网| 一本到不卡免费一区二区| 色哟哟精品一区| 在线观看一区不卡| 在线一区二区三区做爰视频网站| 在线视频一区二区三| 日本国产一区二区| 色狠狠桃花综合| 欧美日韩精品免费| 欧美放荡的少妇| 91精品国产综合久久精品性色 | 国产**成人网毛片九色| 成人性生交大合| gogogo免费视频观看亚洲一| proumb性欧美在线观看| 99精品国产视频| 在线看国产日韩| 欧美日本国产一区| 欧美一区午夜视频在线观看| 欧美电影免费观看高清完整版在线 | 精品国产乱码久久久久久牛牛| 日韩你懂的电影在线观看| 日韩一区二区在线观看视频播放| 日韩欧美色综合网站| 精品国产一区二区国模嫣然| 久久综合av免费| 国产精品无遮挡| 一区二区三区精品在线观看| 午夜欧美2019年伦理| 理论片日本一区| 国产精品亚洲成人| 99久久精品国产观看| 欧美性色aⅴ视频一区日韩精品| 欧美日韩一级大片网址| 欧美一区二区三区精品| 26uuu色噜噜精品一区| 国产精品蜜臀av| 亚洲综合激情网| 久久精品噜噜噜成人av农村| 国产.精品.日韩.另类.中文.在线.播放| av高清不卡在线| 欧美日韩国产高清一区二区| 精品国产露脸精彩对白| 国产精品丝袜91| 午夜伦理一区二区| 国产精品影视在线| 色老头久久综合| 日韩精品资源二区在线| 亚洲国产成人在线| 亚洲高清视频在线| 国产在线不卡一区| 色婷婷精品大在线视频|