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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? listview.c

?? ucCos移植到廣州友善nano2410
?? C
?? 第 1 頁 / 共 2 頁
字號:
      Notification = WM_NOTIFICATION_RELEASED;
    }
  } else {
    Notification = WM_NOTIFICATION_MOVED_OUT;
  }
  _NotifyOwner(hObj, Notification);
}

/*********************************************************************
*
*       _GetXSize
*
* Purpose:
*   Returns the width of the inside listview area.
*/
static int _GetXSize(LISTVIEW_Handle hObj) {
  GUI_RECT Rect;
  WM_GetInsideRectExScrollbar(hObj, &Rect);
  return Rect.x1 + 1;
}

/*********************************************************************
*
*       _GetHeaderWidth
*
* Purpose:
*   Returns the width of all items in header.
*
* Return value:
*   NumItems > 0:  width of all items.
*   NumItems = 0:  1 (to avoid problem with horizontal scrollbar)
*/
static int _GetHeaderWidth(LISTVIEW_Obj* pObj, HEADER_Handle hHeader) {
  int NumItems, i, r = 1;
  NumItems = HEADER_GetNumItems(hHeader);
  if (NumItems) {
    for (i = 0, r = 0; i < NumItems; i++) {
      r += HEADER_GetItemWidth(hHeader, i);
    }
  }
  if (pObj->ScrollStateH.v > (r - pObj->ScrollStateH.PageSize)) {
    r += pObj->ScrollStateH.PageSize - (r - pObj->ScrollStateH.v);
  }
  return r;
}

/*********************************************************************
*
*       LISTVIEW__UpdateScrollPos
*
* Purpose:
*   Checks whether if we must scroll up or scroll down to ensure
*   that selection is in the visible area. This function also
*   makes sure that scroll positions are in valid ranges.
*
* Return value:
*   Difference between old and new vertical scroll pos.
*/
int LISTVIEW__UpdateScrollPos(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj) {
  int PrevScrollStateV;
  PrevScrollStateV = pObj->ScrollStateV.v;
  if (pObj->Sel >= 0) {
    WM_CheckScrollPos(&pObj->ScrollStateV, pObj->Sel, 0, 0);
  } else {
    WM_CheckScrollBounds(&pObj->ScrollStateV);
  }
  WM_CheckScrollBounds(&pObj->ScrollStateH);
  WIDGET__SetScrollState(hObj, &pObj->ScrollStateV, &pObj->ScrollStateH);
  return pObj->ScrollStateV.v - PrevScrollStateV;
}

/*********************************************************************
*
*       LISTVIEW__UpdateScrollParas
*
* Purpose:
*   Calculates number of items and page size of both vertical
*   and horizontal scrollbar. After this LISTVIEW__UpdateScrollPos will
*   be called to ensure scroll positions are in valid ranges.
*/
int LISTVIEW__UpdateScrollParas(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj) {
  int NumRows;
  NumRows = GUI_ARRAY_GetNumItems(&pObj->RowArray);
  /* update vertical scrollbar */
  pObj->ScrollStateV.PageSize = _GetNumVisibleRows(hObj, pObj);
  pObj->ScrollStateV.NumItems = (NumRows) ? NumRows : 1;
  /* update horizontal scrollbar */
  pObj->ScrollStateH.PageSize = _GetXSize(hObj);
  pObj->ScrollStateH.NumItems = _GetHeaderWidth(pObj, pObj->hHeader);
  return LISTVIEW__UpdateScrollPos(hObj, pObj);
}

/*********************************************************************
*
*       _FreeAttached
*
* Purpose:
*   Delete attached objects (if any).
*/
static void _FreeAttached(LISTVIEW_Obj * pObj) {
  int i, j, NumRows, NumColumns;
  NumRows    = GUI_ARRAY_GetNumItems(&pObj->RowArray);
  NumColumns = GUI_ARRAY_GetNumItems(&pObj->AlignArray);
  for (i = 0; i < NumRows; i++) {
    GUI_ARRAY * pRow;
    pRow = (GUI_ARRAY *)GUI_ARRAY_GetpItem(&pObj->RowArray, i);
    /* Delete attached info items */
    for (j = 0; j < NumColumns; j++) {
      LISTVIEW_ITEM * pItem;
      pItem = (LISTVIEW_ITEM *)GUI_ARRAY_GetpItem(pRow, j);
      if (pItem->hItemInfo) {
        GUI_ALLOC_Free(pItem->hItemInfo);
      }
    }
    /* Delete row */
    GUI_ARRAY_Delete(pRow);
  }
  GUI_ARRAY_Delete(&pObj->AlignArray);
  GUI_ARRAY_Delete(&pObj->RowArray);
}

/*********************************************************************
*
*       _AddKey
*
* Returns: 1 if Key has been consumed
*          0 else 
*/
static int _AddKey(LISTVIEW_Handle hObj, int Key) {
  switch (Key) {
  case GUI_KEY_DOWN:
    LISTVIEW_IncSel(hObj);
    return 1;               /* Key has been consumed */
  case GUI_KEY_UP:
    LISTVIEW_DecSel(hObj);
    return 1;               /* Key has been consumed */
  }
  return 0;                 /* Key has NOT been consumed */
}

/*********************************************************************
*
*       _LISTVIEW_Callback
*/
static void _LISTVIEW_Callback (WM_MESSAGE *pMsg) {
  LISTVIEW_Handle hObj;
  LISTVIEW_Obj* pObj;
  WM_SCROLL_STATE ScrollState;
  hObj = pMsg->hWin;
  /* Let widget handle the standard messages */
  if (WIDGET_HandleActive(hObj, pMsg) == 0) {
    return;
  }
  pObj = LISTVIEW_H2P(hObj);
  switch (pMsg->MsgId) {
  case WM_NOTIFY_CLIENTCHANGE:
  case WM_SIZE:
    LISTVIEW__UpdateScrollParas(hObj, pObj);
    return;
  case WM_NOTIFY_PARENT:
    switch (pMsg->Data.v) {
    case WM_NOTIFICATION_CHILD_DELETED:
      /* make sure we do not send any messages to the header child once it has been deleted */
      if (pMsg->hWinSrc == pObj->hHeader) {
        pObj->hHeader = 0;
      }
      break;
    case WM_NOTIFICATION_VALUE_CHANGED:
      if (pMsg->hWinSrc == WM_GetScrollbarV(hObj)) {
        WM_GetScrollState(pMsg->hWinSrc, &ScrollState);
        pObj->ScrollStateV.v = ScrollState.v;
        LISTVIEW__InvalidateInsideArea(hObj, pObj);
        _NotifyOwner(hObj, WM_NOTIFICATION_SCROLL_CHANGED);
      } else if (pMsg->hWinSrc == WM_GetScrollbarH(hObj)) {
        WM_GetScrollState(pMsg->hWinSrc, &ScrollState);
        pObj->ScrollStateH.v = ScrollState.v;
        LISTVIEW__UpdateScrollParas(hObj, pObj);
        HEADER_SetScrollPos(pObj->hHeader, pObj->ScrollStateH.v);
        _NotifyOwner(hObj, WM_NOTIFICATION_SCROLL_CHANGED);
      }
      break;
    case WM_NOTIFICATION_SCROLLBAR_ADDED:
      LISTVIEW__UpdateScrollParas(hObj, pObj);
      break;
    }
    return;
  case WM_PAINT:
    _Paint(hObj, pObj, pMsg);
    return;
  case WM_TOUCH:
    _OnTouch(hObj, pObj, pMsg);
    return;        /* Important: message handled ! */
  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 (_AddKey(hObj, Key)) {
        return;
      }
    }
    break;  /* No return here ... WM_DefaultProc needs to be called */
  case WM_DELETE:
    _FreeAttached(pObj);
    break;  /* No return here ... WM_DefaultProc needs to be called */
  }
  WM_DefaultProc(pMsg);
}

/*********************************************************************
*
*       Exported routines:  Create
*
**********************************************************************
*/

/* Note: the parameters to a create function may vary.
         Some widgets may have multiple create functions */

/*********************************************************************
*
*       LISTVIEW_CreateEx
*/
LISTVIEW_Handle LISTVIEW_CreateEx(int x0, int y0, int xsize, int ysize, WM_HWIN hParent,
                                  int WinFlags, int ExFlags, int Id)
{
  LISTVIEW_Handle hObj;
  GUI_USE_PARA(ExFlags);
  /* Create the window */
  if ((xsize == 0) && (ysize == 0) && (x0 == 0) && (y0 == 0)) {
    GUI_RECT Rect;
    WM_GetClientRectEx(hParent, &Rect);
    xsize = Rect.x1 - Rect.x0 + 1;
    ysize = Rect.y1 - Rect.y0 + 1;
  }
  hObj = WM_CreateWindowAsChild(x0, y0, xsize, ysize, hParent, WinFlags, &_LISTVIEW_Callback,
                                sizeof(LISTVIEW_Obj) - sizeof(WM_Obj));
  if (hObj) {
    LISTVIEW_Obj* pObj;
    WM_LOCK();
    pObj = LISTVIEW_H2P(hObj);
    /* Init sub-classes */
    GUI_ARRAY_CREATE(&pObj->RowArray);
    GUI_ARRAY_CREATE(&pObj->AlignArray);
    /* Init widget specific variables */
    WIDGET__Init(&pObj->Widget, Id, WIDGET_STATE_FOCUSSABLE);
    /* Init member variables */
    LISTVIEW_INIT_ID(pObj);
    pObj->Props = LISTVIEW_DefaultProps;
    pObj->ShowGrid  = 0;
    pObj->RowDistY  = 0;
    pObj->Sel       = -1;
    pObj->LBorder   = 1;
    pObj->RBorder   = 1;
    pObj->hHeader   = HEADER_CreateEx(0, 0, 0, 0, hObj, WM_CF_SHOW, 0, 0);
    LISTVIEW__UpdateScrollParas(hObj, pObj);
    WM_UNLOCK();
  } else {
    GUI_DEBUG_ERROROUT_IF(hObj==0, "LISTVIEW_Create failed")
  }
  return hObj;
}

/*********************************************************************
*
*       Exported routines: Member functions
*
**********************************************************************
*/
/*********************************************************************
*
*       LISTVIEW_IncSel
*/
void LISTVIEW_IncSel(LISTVIEW_Handle hObj) {
  int Sel = LISTVIEW_GetSel(hObj);
  LISTVIEW_SetSel(hObj, Sel + 1);
}

/*********************************************************************
*
*       LISTVIEW_DecSel
*/
void LISTVIEW_DecSel(LISTVIEW_Handle hObj) {
  int Sel = LISTVIEW_GetSel(hObj);
  if (Sel) {
    LISTVIEW_SetSel(hObj, Sel - 1);
  }
}

/*********************************************************************
*
*       LISTVIEW_AddColumn
*/
void LISTVIEW_AddColumn(LISTVIEW_Handle hObj, int Width, const char * s, int Align) {
  if (hObj) {
    LISTVIEW_Obj* pObj;
    unsigned NumRows;
    WM_LOCK();
    pObj = LISTVIEW_H2P(hObj);
    HEADER_AddItem(pObj->hHeader, Width, s, Align);   /* Modify header */
    GUI_ARRAY_AddItem(&pObj->AlignArray, &Align, sizeof(int));
    NumRows = LISTVIEW_GetNumRows(hObj);
    if (NumRows) {
      GUI_ARRAY* pRow;
      unsigned i;
      for (i = 0; i < NumRows; i++) {
        pRow = (GUI_ARRAY*) GUI_ARRAY_GetpItem(&pObj->RowArray, i);
        GUI_ARRAY_AddItem(pRow, NULL, sizeof(LISTVIEW_ITEM) + 1);
      }
    }
    LISTVIEW__UpdateScrollParas(hObj, pObj);
    LISTVIEW__InvalidateInsideArea(hObj, pObj);
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       LISTVIEW_AddRow
*/
void LISTVIEW_AddRow(LISTVIEW_Handle hObj, const GUI_ConstString* ppText) {
  if (hObj) {
    LISTVIEW_Obj* pObj;
    int NumRows;
    WM_LOCK();
    pObj = LISTVIEW_H2P(hObj);
    NumRows = GUI_ARRAY_GetNumItems(&pObj->RowArray);

    /* Create GUI_ARRAY for the new row */
    if (GUI_ARRAY_AddItem(&pObj->RowArray, NULL, sizeof(GUI_ARRAY)) == 0) {
      int i, NumColumns, NumBytes;
      GUI_ARRAY* pRow;
      const char* s;
      GUI_ARRAY_CREATE((GUI_ARRAY *)GUI_ARRAY_GetpItem(&pObj->RowArray, NumRows));  /* For higher debug levels only */
      /* Add columns for the new row */
      NumColumns = HEADER_GetNumItems(pObj->hHeader);
      for (i = 0; i < NumColumns; i++) {
        LISTVIEW_ITEM * pItem;
        pRow = (GUI_ARRAY *)GUI_ARRAY_GetpItem(&pObj->RowArray, NumRows);
        s = (ppText) ? *ppText++ : 0;
        if (s == 0) {
          ppText = 0;
        }
        NumBytes = GUI__strlen(s) + 1;     /* 0 if no string is specified (s == NULL) */
        GUI_ARRAY_AddItem(pRow, NULL, sizeof(LISTVIEW_ITEM) + NumBytes);
        pItem = (LISTVIEW_ITEM *)GUI_ARRAY_GetpItem(pRow, i);
        if (NumBytes > 1) {
          strcpy(pItem->acText, s);
        }
      }
      LISTVIEW__UpdateScrollParas(hObj, pObj);
      LISTVIEW__InvalidateRow(hObj, pObj, NumRows);
    }
    WM_UNLOCK();
  }
}

#else
  void LISTVIEW_C(void);
  void LISTVIEW_C(void) {}
#endif  /* #if GUI_WINSUPPORT */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久影院午夜片一区| 成人激情开心网| 在线91免费看| 天涯成人国产亚洲精品一区av| 精品视频色一区| 日韩在线观看一区二区| 欧美挠脚心视频网站| 日日夜夜一区二区| 欧美一级理论性理论a| 激情欧美一区二区三区在线观看| 久久欧美中文字幕| 福利91精品一区二区三区| 国产精品久久午夜夜伦鲁鲁| 95精品视频在线| 五月天一区二区三区| 2017欧美狠狠色| 色猫猫国产区一区二在线视频| 五月天久久比比资源色| 欧美精品一区二区三区四区| 99精品视频一区二区| 亚洲超碰精品一区二区| 久久免费美女视频| 色呦呦网站一区| 日本不卡123| 国产精品丝袜91| 69堂亚洲精品首页| 国产福利一区二区三区视频在线| 亚洲男人天堂av| 日韩一区二区免费视频| 成人免费高清在线| 婷婷国产v国产偷v亚洲高清| 欧美极品aⅴ影院| 色综合天天综合网国产成人综合天| 日韩激情av在线| 国产精品久线观看视频| 91精选在线观看| 91原创在线视频| 韩国欧美国产1区| 亚洲一区二区视频在线| 国产校园另类小说区| 欧美三级欧美一级| 成人免费高清在线观看| 精品一区二区三区香蕉蜜桃| 亚洲激情图片qvod| 久久久久久久久免费| 欧美日韩精品一区二区三区四区 | 青娱乐精品在线视频| 久久久久久久久久久久久女国产乱| 91电影在线观看| 国产成人精品亚洲777人妖| 亚洲国产婷婷综合在线精品| 国产精品视频免费| 日韩欧美一区二区不卡| 欧美性感一类影片在线播放| 白白色 亚洲乱淫| 国产福利精品一区二区| 美女视频第一区二区三区免费观看网站| 亚洲欧美一区二区三区极速播放| 久久久久久久久久久久久女国产乱| 欧美一区三区四区| 欧美婷婷六月丁香综合色| 91在线看国产| 成人黄色电影在线| 国产一区二区三区观看| 久久成人综合网| 日本怡春院一区二区| 亚洲成av人片| 午夜a成v人精品| 亚洲成人动漫在线观看| 一区二区三区中文免费| 一区二区三区四区在线播放 | 国产精一区二区三区| 麻豆精品在线看| 日本特黄久久久高潮| 性久久久久久久| 亚洲成a天堂v人片| 夜夜嗨av一区二区三区四季av| 亚洲欧洲精品天堂一级 | 国产精品美女久久久久高潮| 国产午夜亚洲精品午夜鲁丝片| 久久综合资源网| 久久久不卡网国产精品二区| 久久综合精品国产一区二区三区| 精品国产免费久久| 26uuu精品一区二区在线观看| 日韩天堂在线观看| 精品日韩欧美一区二区| 欧美精品一区二区三区在线播放 | 91精品国产麻豆| 日韩三级中文字幕| 欧美zozozo| 国产免费久久精品| 亚洲视频每日更新| 亚洲国产成人精品视频| 日本成人在线一区| 国产一区二区主播在线| 成人成人成人在线视频| 色播五月激情综合网| 欧美日韩在线不卡| 日韩午夜激情视频| 欧美激情一区二区三区| 亚洲美女屁股眼交| 日韩不卡一区二区| 国产精品1区二区.| 在线免费亚洲电影| 日韩视频免费观看高清完整版| 久久老女人爱爱| 国产精品久久久久一区二区三区共| 亚洲美女在线一区| 捆绑紧缚一区二区三区视频| 成人国产精品免费观看| 欧美日韩国产成人在线91| 欧美精品一区二区久久久| 国产精品国产三级国产| 三级欧美韩日大片在线看| 懂色av一区二区夜夜嗨| 欧美色国产精品| 久久精品亚洲精品国产欧美| 亚洲综合免费观看高清完整版在线| 日产国产高清一区二区三区 | 亚洲高清久久久| 久久99精品久久久久久久久久久久| av成人免费在线观看| 欧美一级久久久| 亚洲免费观看高清完整| 国模娜娜一区二区三区| 在线观看成人小视频| 国产日韩精品一区二区三区 | 黄网站免费久久| 97久久精品人人做人人爽50路| 日韩亚洲欧美一区二区三区| 亚洲美女少妇撒尿| 国产99一区视频免费| 欧美一区二区播放| 亚洲日本乱码在线观看| 国产一区二区三区四区五区入口| 欧美在线制服丝袜| 中文字幕中文字幕一区二区| 久久99国产精品久久99果冻传媒| 91激情五月电影| 国产精品成人免费精品自在线观看 | 欧美人成免费网站| 最新中文字幕一区二区三区| 久久成人免费电影| 欧美三级一区二区| 国产精品传媒入口麻豆| 国内精品国产成人国产三级粉色| 欧美精品久久久久久久久老牛影院| 中文字幕不卡一区| 国产一区二区在线观看视频| 欧美精三区欧美精三区| 亚洲精品国产高清久久伦理二区| 国产成人精品影院| 精品国产乱码久久久久久闺蜜| 石原莉奈一区二区三区在线观看| 色综合激情久久| 一区在线播放视频| 成人妖精视频yjsp地址| 久久天天做天天爱综合色| 美女脱光内衣内裤视频久久网站| 欧美日韩1234| 亚洲bt欧美bt精品777| 欧美日韩在线播| 一区二区三区在线影院| 欧洲av在线精品| 亚洲一区二区三区影院| 在线这里只有精品| 亚洲精品乱码久久久久久黑人| 97久久超碰精品国产| 亚洲人成人一区二区在线观看| av午夜一区麻豆| 亚洲欧美日韩人成在线播放| 色综合久久88色综合天天| 亚洲综合免费观看高清完整版| 在线视频国内一区二区| 香蕉成人啪国产精品视频综合网| 欧美日韩高清一区二区三区| 婷婷开心久久网| 欧美第一区第二区| 国产在线精品不卡| 亚洲国产精品av| 91啪亚洲精品| 亚洲va国产天堂va久久en| 91精品国产aⅴ一区二区| 美女尤物国产一区| 久久午夜色播影院免费高清| 国产老肥熟一区二区三区| 久久婷婷国产综合国色天香| 成人一区二区三区视频在线观看 | 国产精品丝袜一区| 97久久精品人人澡人人爽| 亚洲激情在线播放| 欧美一区午夜精品| 国产91在线|亚洲| 亚洲色图欧洲色图婷婷| 欧美区一区二区三区| 国产精品一区二区你懂的| 欧美激情一区二区三区不卡| 欧美亚洲一区二区三区四区| 美美哒免费高清在线观看视频一区二区|