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

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

?? listbox.c

?? ucCos移植到廣州友善nano2410
?? C
?? 第 1 頁 / 共 3 頁
字號:
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) {
    /* Owner needs to be informed about focus change */
    if (pMsg->MsgId == WM_SET_FOCUS) {
      if (pMsg->Data.v == 0) {            /* Lost focus ? */
        _NotifyOwner(hObj, LISTBOX_NOTIFICATION_LOST_FOCUS);
      }
    }
    return;
  }
  switch (pMsg->MsgId) {
  case WM_NOTIFY_PARENT:
    switch (pMsg->Data.v) {
    case WM_NOTIFICATION_VALUE_CHANGED:
      if (pMsg->hWinSrc  == WM_GetScrollbarV(hObj)) {
        WM_GetScrollState(pMsg->hWinSrc, &ScrollState);
        pObj->ScrollStateV.v = ScrollState.v;
        LISTBOX__InvalidateInsideArea(hObj);
        _NotifyOwner(hObj, WM_NOTIFICATION_SCROLL_CHANGED);
      } else if (pMsg->hWinSrc == WM_GetScrollbarH(hObj)) {
        WM_GetScrollState(pMsg->hWinSrc, &ScrollState);
        pObj->ScrollStateH.v = ScrollState.v;
        LISTBOX__InvalidateInsideArea(hObj);
        _NotifyOwner(hObj, WM_NOTIFICATION_SCROLL_CHANGED);
      }
      break;
    case WM_NOTIFICATION_SCROLLBAR_ADDED:
      LISTBOX_UpdateScrollers(hObj);
      break;
    }
    break;
  case WM_PAINT:
    _OnPaint(hObj, pObj, pMsg);
    break;
  case WM_PID_STATE_CHANGED:
    {
      const WM_PID_STATE_CHANGED_INFO* pInfo = (const WM_PID_STATE_CHANGED_INFO*)pMsg->Data.p;
      if (pInfo->State) {
        int Sel;
        Sel = _GetItemFromPos(hObj, pObj, pInfo->x, pInfo->y);
        if (Sel >= 0) {
          _ToggleMultiSel(hObj, pObj, Sel);
          LISTBOX_SetSel(hObj, Sel);
        }
        _NotifyOwner(hObj, WM_NOTIFICATION_CLICKED);
        return;
      }
    }
    break;
  case WM_TOUCH:
    _OnTouch(hObj, pMsg);
    return;
#if GUI_SUPPORT_MOUSE
  case WM_MOUSEOVER:
    if (_OnMouseOver(hObj, pObj, pMsg) == 0)
      return;
    break;
#endif
  case WM_DELETE:
    _FreeAttached(pObj);
    break;       /* No return here ... WM_DefaultProc needs to be called */
  case WM_KEY:
    if (((const WM_KEY_INFO*)(pMsg->Data.p))->PressedCnt > 0) {
      int Key;
      Key = ((const WM_KEY_INFO*)(pMsg->Data.p))->Key;
      if (LISTBOX_AddKey(hObj, Key)) {
        return;
      }
    }
    break;
  case WM_SIZE:
    LISTBOX_UpdateScrollers(hObj);
    WM_InvalidateWindow(hObj);
    break;
  }
  WM_DefaultProc(pMsg);
}

/*********************************************************************
*
*       _MoveSel
*
*  Moves the selection/focus to the next valid item
*/
static void _MoveSel(LISTBOX_Handle hObj, int Dir) {
  int Index, NewSel = -1, NumItems;
  LISTBOX_Obj * pObj;
  pObj = LISTBOX_H2P(hObj);
  Index = LISTBOX_GetSel(hObj);
  NumItems = LISTBOX__GetNumItems(pObj);
  do {
    WM_HMEM hItem;
    Index += Dir;
    if ((Index < 0) || (Index >= NumItems)) {
      break;
    }
    hItem = GUI_ARRAY_GethItem(&pObj->ItemArray, Index);
    if (hItem) {
      LISTBOX_ITEM * pItem = (LISTBOX_ITEM *)GUI_ALLOC_h2p(hItem);
      if (!(pItem->Status & LISTBOX_ITEM_DISABLED)) {
        NewSel = Index;
      }
    }
  } while(NewSel < 0);
  if (NewSel >= 0) {
    LISTBOX_SetSel(hObj, NewSel);
  }
}

/*********************************************************************
*
*       _AddKey
*
* Returns: 1 if Key has been consumed
*          0 else 
*/
static int _AddKey(LISTBOX_Handle hObj, int Key) {
  LISTBOX_Obj* pObj;
  pObj = LISTBOX_H2P(hObj);
  switch (Key) {
  case ' ':
    _ToggleMultiSel(hObj, pObj, pObj->Sel);
    return 1;               /* Key has been consumed */
  case GUI_KEY_RIGHT:
    if (WM_SetScrollValue(&pObj->ScrollStateH, pObj->ScrollStateH.v + pObj->Props.ScrollStepH)) {
      LISTBOX_UpdateScrollers(hObj);
      LISTBOX__InvalidateInsideArea(hObj);
    }
    return 1;               /* Key has been consumed */
  case GUI_KEY_LEFT:
    if (WM_SetScrollValue(&pObj->ScrollStateH, pObj->ScrollStateH.v - pObj->Props.ScrollStepH)) {
      LISTBOX_UpdateScrollers(hObj);
      LISTBOX__InvalidateInsideArea(hObj);
    }
    return 1;               /* Key has been consumed */
  case GUI_KEY_DOWN:
    LISTBOX_IncSel(hObj);
    return 1;               /* Key has been consumed */
  case GUI_KEY_UP:
    LISTBOX_DecSel(hObj);
    return 1;               /* Key has been consumed */
  default:
    if(_IsAlphaNum(Key)) {
      _SelectByKey(hObj, Key);
      return 1;               /* Key has been consumed */
    }
  }
  return 0;
}

/*********************************************************************
*
*       Exported routines:  Create
*
**********************************************************************
*/
/*********************************************************************
*
*       LISTBOX_CreateEx
*/
LISTBOX_Handle LISTBOX_CreateEx(int x0, int y0, int xsize, int ysize, WM_HWIN hParent,
                                int WinFlags, int ExFlags, int Id, const GUI_ConstString* ppText)
{
  LISTBOX_Handle hObj;
  GUI_USE_PARA(ExFlags);
  hObj = WM_CreateWindowAsChild(x0, y0, xsize, ysize, hParent, WinFlags, _LISTBOX_Callback,
                                sizeof(LISTBOX_Obj) - sizeof(WM_Obj));
  if (hObj) {
    LISTBOX_Obj* pObj;
    WM_LOCK();
    pObj = LISTBOX_H2P(hObj);
     /* Init sub-classes */
    GUI_ARRAY_CREATE(&pObj->ItemArray);
   /* init widget specific variables */
    WIDGET__Init(&pObj->Widget, Id, WIDGET_STATE_FOCUSSABLE);
    pObj->Props = LISTBOX_DefaultProps;
    if (ppText) {
      /* init member variables */
      /* Set non-zero attributes */
      LISTBOX_SetText(hObj, ppText);
    }
    INIT_ID(pObj);
    LISTBOX_UpdateScrollers(hObj);
    WM_UNLOCK();
  }
  return hObj;
}

/*********************************************************************
*
*       Exported routines:  Various methods
*
**********************************************************************
*/
/*********************************************************************
*
*       LISTBOX_InvalidateItem
*/
void LISTBOX_InvalidateItem(LISTBOX_Handle hObj, int Index) {
  if (hObj) {
    LISTBOX_Obj* pObj;
    int NumItems;
    WM_LOCK();
    pObj = LISTBOX_H2P(hObj);
    NumItems = LISTBOX__GetNumItems(pObj);
    if (Index < NumItems) {
      if (Index < 0) {
        int i;
        for (i = 0; i < NumItems; i++) {
          LISTBOX__InvalidateItemSize(pObj, i);
        }
        LISTBOX_UpdateScrollers(hObj);
        LISTBOX__InvalidateInsideArea(hObj);
      } else {
        LISTBOX__InvalidateItemSize(pObj, Index);
        LISTBOX_UpdateScrollers(hObj);
        LISTBOX__InvalidateItemAndBelow(hObj, pObj, Index);
      }
    }
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       LISTBOX_AddKey
*
* Returns: 1 if Key has been consumed
*          0 else 
*/
int LISTBOX_AddKey(LISTBOX_Handle hObj, int Key) {
  int r = 0;
  if (hObj) {
    WM_LOCK();
    r = _AddKey(hObj, Key);
    WM_UNLOCK();
  }
  return r;
}

/*********************************************************************
*
*       LISTBOX_AddString
*/
void LISTBOX_AddString(LISTBOX_Handle hObj, const char* s) {
  if (hObj && s) {
    LISTBOX_Obj* pObj;
    LISTBOX_ITEM Item = {0, 0};
    WM_LOCK();
    pObj = LISTBOX_H2P(hObj);
    if (GUI_ARRAY_AddItem(&pObj->ItemArray, &Item, sizeof(LISTBOX_ITEM) + strlen(s)) == 0) {
      unsigned ItemIndex = GUI_ARRAY_GetNumItems(&pObj->ItemArray) - 1;
      LISTBOX_ITEM* pItem= (LISTBOX_ITEM*)GUI_ARRAY_GetpItem(&pObj->ItemArray, ItemIndex);
      strcpy(pItem->acText, s);
      LISTBOX__InvalidateItemSize(pObj, ItemIndex);
      LISTBOX_UpdateScrollers(hObj);
      LISTBOX__InvalidateItem(hObj, pObj, ItemIndex);
    }
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       LISTBOX_SetText
*/
void LISTBOX_SetText(LISTBOX_Handle hObj, const GUI_ConstString* ppText) {
  if (hObj) {
    int i;
    const char* s;
    WM_LOCK();
    if (ppText) {
      for (i = 0; (s = *(ppText+i)) != 0; i++) {
        LISTBOX_AddString(hObj, s);
      }
    }
    LISTBOX_InvalidateItem(hObj, LISTBOX_ALL_ITEMS);
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       LISTBOX_SetSel
*/
void LISTBOX_SetSel (LISTBOX_Handle hObj, int NewSel) {
  if (hObj) {
    LISTBOX_Obj* pObj;
    int MaxSel;
    WM_LOCK();
    pObj = LISTBOX_H2P(hObj);
    MaxSel = LISTBOX__GetNumItems(pObj);
    MaxSel = MaxSel ? MaxSel - 1 : 0;
    if (NewSel > MaxSel) {
      NewSel = MaxSel;
    }
    if (NewSel < 0) {
      NewSel = -1;
    } else {
      WM_HMEM hItem = GUI_ARRAY_GethItem(&pObj->ItemArray, NewSel);
      if (hItem) {
        LISTBOX_ITEM* pItem = (LISTBOX_ITEM*)GUI_ALLOC_h2p(hItem);
        if (pItem->Status & LISTBOX_ITEM_DISABLED) {
          NewSel = -1;
        }
      }
    }
    if (NewSel != pObj->Sel) {
      int OldSel;
      OldSel    = pObj->Sel;
      pObj->Sel = NewSel;
      if (_UpdateScrollPos(hObj, pObj)) {
        LISTBOX__InvalidateInsideArea(hObj);
      } else {
        LISTBOX__InvalidateItem(hObj, pObj, OldSel);
        LISTBOX__InvalidateItem(hObj, pObj, NewSel);
      }
      _NotifyOwner(hObj, WM_NOTIFICATION_SEL_CHANGED);
    }
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       LISTBOX_GetSel
*/
int  LISTBOX_GetSel (LISTBOX_Handle hObj) {
  int r = -1;
  LISTBOX_Obj* pObj;
  if (hObj) {
    WM_LOCK();
    pObj = LISTBOX_H2P(hObj);
    ASSERT_IS_VALID_PTR(pObj);
    r = pObj->Sel;
    WM_UNLOCK();
  }
  return r;
}

/*********************************************************************
*
*       LISTBOX_IncSel
*/
void LISTBOX_IncSel      (LISTBOX_Handle hObj) {
  if (hObj) {
    WM_LOCK();
    _MoveSel(hObj, 1);
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       LISTBOX_DecSel
*/
void LISTBOX_DecSel      (LISTBOX_Handle hObj) {
  if (hObj) {
    WM_LOCK();
    _MoveSel(hObj, -1);
    WM_UNLOCK();
  }
}

#else                            /* Avoid problems with empty object modules */
  void LISTBOX_C(void) {}
#endif

/*************************** End of file ****************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费伊人电影| 久久久久久久久久久黄色| 国产精品一级在线| 国产一区日韩二区欧美三区| 水野朝阳av一区二区三区| 亚洲狼人国产精品| 亚洲一区二区三区国产| 亚洲免费观看视频| 亚洲一区二区四区蜜桃| 亚洲一线二线三线久久久| 一区二区三区国产精品| 亚洲午夜激情av| 亚洲va国产天堂va久久en| 亚洲电影你懂得| 日韩精品成人一区二区在线| 日韩国产高清在线| 青青草国产精品97视觉盛宴| 蜜桃视频在线一区| 久久精品99国产精品日本| 国产在线精品不卡| 国产91精品一区二区麻豆亚洲| 成人性生交大合| 99精品国产91久久久久久| 欧美三级一区二区| 91精品久久久久久久99蜜桃| 欧美精品一区二区三区在线 | 丝袜脚交一区二区| 美女视频黄免费的久久| 成人黄色小视频在线观看| 色综合久久久久久久久久久| 538在线一区二区精品国产| 精品久久久久一区| 亚洲欧美偷拍另类a∨色屁股| 亚洲va天堂va国产va久| 精品制服美女久久| 色婷婷激情综合| 精品国产1区二区| 亚洲欧美日韩在线播放| 麻豆成人久久精品二区三区小说| 国产精品1024| 欧美精品欧美精品系列| 久久久久久久久久久久久久久99 | 国产精品人人做人人爽人人添| 亚洲三级视频在线观看| 日韩在线a电影| 一本一道综合狠狠老| 日韩一卡二卡三卡四卡| 国产精品美女久久久久久久网站| 午夜精品久久久久久久99樱桃| 九九精品一区二区| 91美女片黄在线观看91美女| 欧美电影精品一区二区| 亚洲国产精品视频| jlzzjlzz国产精品久久| 精品日韩av一区二区| 亚洲国产精品久久久久婷婷884| 免费成人在线观看| 欧美日韩在线观看一区二区| 亚洲欧美自拍偷拍| 国产成人精品亚洲777人妖| 日韩三级免费观看| 午夜视黄欧洲亚洲| av电影一区二区| 国产精品蜜臀在线观看| 国产福利91精品| 久久婷婷综合激情| 麻豆91免费看| 欧美一区二视频| 亚洲制服丝袜一区| 欧美亚洲自拍偷拍| 亚洲一级二级在线| 91精品福利在线| 最新热久久免费视频| 成人午夜激情片| 中文字幕在线免费不卡| 成人黄色av电影| 亚洲欧洲综合另类在线| 99久久国产免费看| 亚洲精品免费一二三区| 日本道精品一区二区三区 | 亚洲一区av在线| 欧洲一区在线电影| 一区二区三区国产精华| 欧美日韩一级大片网址| 香蕉久久夜色精品国产使用方法 | 日韩国产欧美一区二区三区| 欧美精品一级二级| 日本网站在线观看一区二区三区| 在线成人av影院| 久国产精品韩国三级视频| 2020国产精品| 福利视频网站一区二区三区| 亚洲三级在线免费| 一本色道亚洲精品aⅴ| 亚洲午夜一二三区视频| 91精品国产色综合久久| 国产伦精品一区二区三区视频青涩| 国产午夜精品久久久久久久| 成人黄色在线网站| 亚洲午夜视频在线观看| 欧美一级高清片| 成人高清视频免费观看| 亚洲精品videosex极品| 91麻豆精品国产91久久久久| 国产盗摄一区二区三区| 亚洲综合在线观看视频| 欧美人成免费网站| 国产河南妇女毛片精品久久久| 一区精品在线播放| 欧美猛男gaygay网站| 国产麻豆日韩欧美久久| 曰韩精品一区二区| 久久嫩草精品久久久久| 色婷婷精品久久二区二区蜜臂av| 美女视频黄 久久| 国产精品国产a级| 欧美日韩黄视频| 成人午夜激情在线| 男男gaygay亚洲| 一区在线观看免费| 亚洲精品一区二区三区福利| 欧美日韩精品一区二区三区四区 | 亚洲成人动漫在线免费观看| www国产精品av| 欧美丝袜丝nylons| 成人激情动漫在线观看| 午夜伦欧美伦电影理论片| 中文子幕无线码一区tr| 欧美女孩性生活视频| 99国产精品久久久久久久久久| 美女在线视频一区| 午夜欧美大尺度福利影院在线看| 中文字幕一区三区| 久久久久综合网| 日韩三级精品电影久久久| 欧美日韩国产免费一区二区| 成人av免费在线| 国产伦精品一区二区三区视频青涩| 日韩国产高清影视| 午夜精品123| 亚洲一区二区综合| 亚洲欧美另类久久久精品2019 | 91视频免费看| 成人av电影在线播放| 国产乱码精品一区二区三区av| 日本成人超碰在线观看| 亚洲国产精品久久一线不卡| 洋洋成人永久网站入口| 樱桃国产成人精品视频| 亚洲日本成人在线观看| 国产精品久线观看视频| 亚洲国产精品成人综合色在线婷婷| 久久综合狠狠综合久久激情 | 一区二区三区高清| 国产精品久久久久久久久搜平片| 2024国产精品| 国产午夜精品福利| 国产精品私房写真福利视频| 国产亚洲一区字幕| 久久精品日产第一区二区三区高清版| 欧美成人艳星乳罩| 欧美不卡视频一区| 日本一区二区三区久久久久久久久不| 2020国产精品久久精品美国| 久久久久久亚洲综合影院红桃| 久久久影院官网| 欧美精品一区男女天堂| 国产精品丝袜在线| 一区二区欧美精品| 亚洲一区二区高清| 日日夜夜免费精品| 狠狠色综合播放一区二区| 久久精品国产一区二区三区免费看 | 国产精品美女久久久久久2018 | 亚洲高清视频的网址| 日精品一区二区三区| 狠狠色丁香婷综合久久| 成人精品国产一区二区4080| 91麻豆6部合集magnet| 欧美日韩不卡在线| 精品国产一区二区三区不卡| 国产精品传媒视频| 亚洲高清视频的网址| 国产精品一区二区在线观看网站 | 欧美成人伊人久久综合网| 久久天天做天天爱综合色| 亚洲天堂中文字幕| 首页欧美精品中文字幕| 成人app软件下载大全免费| 99精品久久只有精品| 欧美一级欧美三级在线观看| 国产精品天美传媒| 视频在线在亚洲| jiyouzz国产精品久久| 欧美电影精品一区二区| 亚洲同性同志一二三专区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 五月天婷婷综合| 国产成人8x视频一区二区| 欧美精品丝袜中出|