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

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

?? listview.c

?? ucos 移植 stm32 在iar5.2通過運(yùn)行良好
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
      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 */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区在线视频免费观看| 欧美日本国产视频| 天天av天天翘天天综合网色鬼国产| 香蕉久久夜色精品国产使用方法| 91猫先生在线| 日韩电影在线观看一区| 日韩小视频在线观看专区| 男女男精品视频网| 国产精品久久久久久久浪潮网站 | 99精品国产热久久91蜜凸| 亚洲精品国产成人久久av盗摄 | 成人一级片在线观看| 亚洲国产中文字幕在线视频综合| 日韩欧美电影一区| 成人午夜免费电影| 麻豆国产精品官网| 亚洲另类色综合网站| 中文字幕第一区综合| 欧美一区二区三区不卡| 成人夜色视频网站在线观看| 日本午夜精品视频在线观看| 国产精品久久久久久久久动漫| 91精品国产欧美一区二区18| 欧美性色aⅴ视频一区日韩精品| 国产精品一区在线观看你懂的| 亚洲综合在线电影| 亚洲精品在线三区| 欧美一区二区三区视频在线 | 日韩欧美亚洲国产精品字幕久久久| 99久久精品国产观看| thepron国产精品| 成人美女视频在线观看18| 国产经典欧美精品| 国产成人福利片| 狠狠色丁香久久婷婷综| 亚洲视频网在线直播| 日韩无一区二区| 成人免费观看视频| 93久久精品日日躁夜夜躁欧美| 成人永久免费视频| 91免费看`日韩一区二区| 国产福利视频一区二区三区| 日韩精品一卡二卡三卡四卡无卡 | 精品黑人一区二区三区久久| 精品国产伦一区二区三区观看方式| 精品国产青草久久久久福利| 精品sm捆绑视频| 中文字幕一区在线观看| 欧美激情一区二区三区全黄| 欧美精品三级在线观看| 日韩一二三区不卡| 亚洲国产精品精华液ab| 亚洲综合一区二区三区| 一区二区三区高清在线| 日日夜夜精品视频天天综合网| 蜜桃视频一区二区三区在线观看| 激情小说亚洲一区| 白白色亚洲国产精品| 欧美日韩一区二区三区在线看| 色视频欧美一区二区三区| 成人不卡免费av| 91精品国产乱码久久蜜臀| 国产精品国产成人国产三级| 亚洲综合视频网| 国产精品综合二区| 91麻豆精品国产91久久久更新时间 | 风间由美一区二区av101| 欧美曰成人黄网| 综合亚洲深深色噜噜狠狠网站| 中文一区二区完整视频在线观看 | 亚洲电影在线播放| 午夜av区久久| 国产专区欧美精品| 一道本成人在线| 国产亚洲自拍一区| 日韩电影一区二区三区| 久久精品国产99久久6| 欧美三级视频在线播放| 一区二区三区在线观看网站| 成人精品免费看| 欧美精品一区二区蜜臀亚洲| 日产精品久久久久久久性色| 在线观看日韩电影| 一区二区久久久久久| 91小视频在线免费看| 亚洲色图欧洲色图| 成人福利视频在线看| 国产精品久久久久久久午夜片| 一区二区久久久久| 欧美亚日韩国产aⅴ精品中极品| 亚洲精品五月天| 欧美在线观看视频一区二区三区| 怡红院av一区二区三区| 国产成a人无v码亚洲福利| 欧美精品黑人性xxxx| 毛片一区二区三区| 国产精品久久久久久久久晋中 | 男男成人高潮片免费网站| 欧美精品电影在线播放| 激情成人午夜视频| 成人免费一区二区三区视频 | 亚洲bdsm女犯bdsm网站| 欧美色图免费看| 青青青爽久久午夜综合久久午夜| 日韩欧美国产一二三区| 成人亚洲一区二区一| 亚洲精品视频观看| 日本精品视频一区二区三区| 亚洲国产综合在线| 欧美日韩夫妻久久| 日本aⅴ精品一区二区三区| 欧美精品一区二区三区视频| 国产精品亚洲一区二区三区妖精| 日韩理论片网站| 精品少妇一区二区三区日产乱码| 亚洲成人自拍一区| 日韩你懂的在线观看| 成人av电影在线播放| 日韩电影免费在线观看网站| 2021中文字幕一区亚洲| 成人高清视频在线| 美女mm1313爽爽久久久蜜臀| 亚洲三级免费电影| 中文天堂在线一区| 久久九九全国免费| 欧美亚洲综合网| 国产成人av一区| 国产真实精品久久二三区| 五月婷婷色综合| 一区二区三区精品久久久| 亚洲人123区| 最新国产精品久久精品| 国产精品国产三级国产普通话三级 | 亚洲少妇30p| 精品美女在线播放| 久久这里只有精品首页| 精品1区2区3区| 6080亚洲精品一区二区| 日韩欧美黄色影院| 精品美女一区二区| 日韩一区二区电影| 精品国产一区久久| xfplay精品久久| 国产免费久久精品| 亚洲人成人一区二区在线观看 | 国产日韩欧美a| 国产精品久久夜| 一区二区三区日韩欧美| 午夜精品久久久久久久99水蜜桃 | 日韩欧美黄色影院| 在线观看91精品国产入口| 成人国产免费视频| 在线播放中文一区| 精品黑人一区二区三区久久 | 蜜桃久久久久久久| 国产超碰在线一区| a级高清视频欧美日韩| 婷婷夜色潮精品综合在线| 国模少妇一区二区三区| 色婷婷精品久久二区二区蜜臀av | 国产精品灌醉下药二区| 亚洲美女区一区| 国产一区在线观看麻豆| 色婷婷久久综合| 久久九九影视网| 肉丝袜脚交视频一区二区| 日韩精品免费专区| 97se亚洲国产综合自在线| 日韩一区二区中文字幕| 最新成人av在线| 国产成人av一区二区三区在线| 中文字幕一区二区三区四区| 国产激情一区二区三区四区| 丁香网亚洲国际| 欧美喷潮久久久xxxxx| 亚洲欧美激情插| 99久久婷婷国产综合精品电影 | av中文字幕亚洲| 久久色中文字幕| 精品影院一区二区久久久| 欧美三级电影在线看| 亚洲综合男人的天堂| 欧美亚洲一区二区在线| 亚洲黄色av一区| 91麻豆国产精品久久| 亚洲一区二区三区精品在线| 色婷婷综合久久久| 亚洲精品成人在线| 91浏览器在线视频| 欧美国产一区二区| 成人自拍视频在线| 自拍偷拍亚洲激情| 欧美在线制服丝袜| 中文字幕综合网| 国产精品福利电影一区二区三区四区| 亚洲免费观看高清完整版在线观看| 成人亚洲精品久久久久软件| 日本一区二区三区电影| 成人黄色国产精品网站大全在线免费观看| 2020国产精品自拍|