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

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

?? listbox.c

?? ucgui源碼3.32
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*
*********************************************************************************************************
*                                                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.c
Purpose     : 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     /* Not selected */
#endif

#ifndef LISTBOX_BKCOLOR1_DEFAULT
  #define LISTBOX_BKCOLOR1_DEFAULT GUI_GRAY      /* Selected, no focus */
#endif

#ifndef LISTBOX_BKCOLOR2_DEFAULT
  #define LISTBOX_BKCOLOR2_DEFAULT GUI_BLUE      /* Selected, focus */
#endif

#ifndef LISTBOX_TEXTCOLOR0_DEFAULT
  #define LISTBOX_TEXTCOLOR0_DEFAULT GUI_BLACK   /* Not selected */
#endif

#ifndef LISTBOX_TEXTCOLOR1_DEFAULT
  #define LISTBOX_TEXTCOLOR1_DEFAULT GUI_WHITE   /* Selected, no focus */
#endif

#ifndef LISTBOX_TEXTCOLOR2_DEFAULT
  #define LISTBOX_TEXTCOLOR2_DEFAULT GUI_WHITE   /* Selected, focus */
#endif


/*********************************************************************
*
*       Object definition
*
**********************************************************************
*/

typedef struct {
  WIDGET Widget;
  I16 Sel;                        /* current selection */
  I16 NumItems;
  WM_HMEM haHandle;               /* Handle to buffer holding handles */
  WM_SCROLL_STATE ScrollState;
  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) {
  return pObj->NumItems;
}

/*********************************************************************
*
*       _GethItem

  Returns:
    Handle of the specified item
*/
static WM_HMEM _GethItem(LISTBOX_Obj* pObj, int Index) {
  WM_HMEM h = 0;
  if (Index < pObj->NumItems) {
    WM_HMEM  ha;
    WM_HMEM* pa;
    ha = pObj->haHandle;
    if (ha) {
      pa = (WM_HMEM*) WM_HMEM2Ptr(ha);
      h = *(pa + Index);
    }
  }
  return h;
}

/*********************************************************************
*
*       _GetpItem

  Returns:
    Pointer to the specified item
*/
static const char* _GetpItem(LISTBOX_Obj* pObj, int Index) {
  const char* s = NULL;
  WM_HMEM h = _GethItem(pObj, Index);
  if (h) {
    s = (const char*) WM_HMEM2Ptr(h);
  }
  return s;
}


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;
  pObj = LISTBOX_H2P(hObj);
  Key = _Tolower(Key);
  for (i = 0; i < _GetNumItems(pObj); i++) {
    char c = _Tolower(*_GetpItem(pObj, i));
    if (c == Key) {
      LISTBOX_SetSel(hObj, i);
      break;
    }
  }
}

/*********************************************************************
*
*       _Delete
*/
static void _FreeAttached(LISTBOX_Obj* pObj) {
  int i;
  WM_HMEM ha;
  WM_HMEM* pa;
  ha = pObj->haHandle;
  if (ha) {
    pa = (WM_HMEM*) WM_HMEM2Ptr(ha);
    /* Fre the attached strings, one at a time */
    for (i = 0; i < pObj->NumItems; i++) {
      WM_FREEPTR(pa+i);
    }
    /* Free the handle buffer */
    WM_FREEPTR(&pObj->haHandle);
  }
}


/*********************************************************************
*
*       _Paint
*/
static void _Paint(LISTBOX_Handle hObj) {
  int i;
  int Border;
  GUI_RECT r;
  int FontDistY;
  LISTBOX_Obj* pObj;
  int NumItems;
  pObj = LISTBOX_H2P(hObj);
  NumItems = _GetNumItems(pObj);
  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++) {
    const char* s;
    int y, ColorIndex;
    y = Border + (i - pObj->ScrollState.v) * FontDistY;
    s = _GetpItem(pObj, i);
    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(s, 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;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一区二区三区蜜桃视频| 欧美一区二区精品久久911| 日韩中文字幕av电影| 久久久天堂av| 欧美日韩国产中文| av爱爱亚洲一区| 免费视频最近日韩| 中文字幕在线不卡| 精品久久免费看| 欧美视频一二三区| 成人av电影在线| 韩国av一区二区| 亚洲3atv精品一区二区三区| 国产精品久久久久9999吃药| 日韩一区二区在线播放| 在线国产电影不卡| www.在线成人| 国产传媒欧美日韩成人| 日本一道高清亚洲日美韩| 伊人开心综合网| 中文一区二区完整视频在线观看| 91精品国产入口| 欧美在线播放高清精品| 不卡的电影网站| 国产精品自拍三区| 精品一区二区免费视频| 日韩精品亚洲一区| 亚洲va欧美va天堂v国产综合| 中文字幕一区av| 国产精品入口麻豆九色| 久久午夜色播影院免费高清| 欧美一级淫片007| 精品视频在线视频| 欧美视频第二页| 一本色道久久综合精品竹菊| 99麻豆久久久国产精品免费| 国产成人精品三级麻豆| 国产精品一区二区无线| 国产一区二区不卡老阿姨| 美国十次了思思久久精品导航| 天堂久久久久va久久久久| 亚洲电影中文字幕在线观看| 亚洲综合色区另类av| 一区二区三区在线视频免费观看| 亚洲国产精品99久久久久久久久| 久久免费午夜影院| 国产欧美综合在线观看第十页| 国产午夜久久久久| 欧美国产日韩在线观看| 国产日韩精品一区二区三区 | 成人国产亚洲欧美成人综合网 | 欧美网站大全在线观看| 欧美日韩一区在线观看| 欧美日韩另类国产亚洲欧美一级| 欧美高清视频在线高清观看mv色露露十八| 欧美日韩激情在线| 日韩一区二区三区四区| 久久综合网色—综合色88| 久久久国产一区二区三区四区小说 | 91女厕偷拍女厕偷拍高清| 色域天天综合网| 欧美精品日韩一区| 久久蜜臀中文字幕| 中文字幕一区在线| 亚洲成人福利片| 久久aⅴ国产欧美74aaa| 丁香啪啪综合成人亚洲小说 | 欧美体内she精高潮| 6080国产精品一区二区| 久久视频一区二区| 亚洲婷婷综合久久一本伊一区| 亚洲国产精品欧美一二99| 人禽交欧美网站| 国产iv一区二区三区| 91美女视频网站| 日韩美女在线视频| 国产精品久久久久影院亚瑟| 亚洲高清免费一级二级三级| 久久国产精品99精品国产 | 亚洲国产精品视频| 精品一区二区三区免费播放| 成人app网站| 欧美精品久久99久久在免费线| 久久精品视频免费观看| 一区二区三区在线免费播放| 美女久久久精品| 91麻豆精品秘密| 欧美变态tickling挠脚心| 中文字幕在线不卡一区| 免费看欧美女人艹b| 成人高清免费在线播放| 欧美日韩高清不卡| 国产精品污污网站在线观看| 亚洲成人免费视| 国产高清在线精品| 欧美喷水一区二区| 自拍偷拍欧美精品| 国产一区二区三区四区在线观看 | 久久久久久一二三区| 综合婷婷亚洲小说| 国内外成人在线| 欧美日韩国产a| 中文字幕一区二区三中文字幕| 人人精品人人爱| 在线中文字幕一区二区| 国产欧美一区二区三区鸳鸯浴 | 蜜臀av国产精品久久久久| 91影视在线播放| 久久久蜜臀国产一区二区| 午夜天堂影视香蕉久久| 91网站在线播放| 中文字幕欧美区| 久久er99精品| 91精品国产91综合久久蜜臀| |精品福利一区二区三区| 国产剧情一区二区三区| 91精品国产麻豆国产自产在线 | 国产高清不卡一区二区| 欧美日韩一区不卡| 亚洲精选免费视频| 99久久综合精品| 国产精品色哟哟网站| 国产精品影视在线观看| 欧美成人一级视频| 日本不卡视频在线| 欧美精品在线观看播放| 亚洲精品视频免费观看| 99精品国产一区二区三区不卡| 国产性色一区二区| 国产在线国偷精品产拍免费yy| 日韩精品一区二区三区中文不卡 | 亚洲视频免费在线| 丁香婷婷综合色啪| 欧美国产国产综合| 国产成人av一区二区三区在线| 精品粉嫩超白一线天av| 精品无人区卡一卡二卡三乱码免费卡| 91精品国产手机| 看片网站欧美日韩| 精品国产精品网麻豆系列| 裸体在线国模精品偷拍| 精品久久久久久无| 精品午夜久久福利影院| 久久久无码精品亚洲日韩按摩| 国产一区二区三区美女| 久久亚洲一区二区三区四区| 激情综合网激情| 久久综合久久鬼色| 成人小视频在线| 亚洲视频综合在线| 欧美亚洲丝袜传媒另类| 午夜精品久久久| 日韩免费成人网| 国产精品中文字幕一区二区三区| 国产三级一区二区| 一本大道久久a久久综合| 亚洲午夜电影网| 日韩免费观看高清完整版| 国产精一品亚洲二区在线视频| 国产欧美va欧美不卡在线| 不卡视频一二三四| 一区二区高清视频在线观看| 制服丝袜国产精品| 国产乱人伦偷精品视频免下载| 国产精品女主播av| 精品视频在线看| 国产一区二区三区最好精华液| 国产精品久久三| 欧美日韩在线电影| 国产一区二区免费视频| 亚洲欧美日韩中文字幕一区二区三区| 欧美视频在线观看一区| 精品亚洲国产成人av制服丝袜| 国产精品欧美久久久久无广告 | 国产三级三级三级精品8ⅰ区| 99re热视频精品| 视频在线观看一区二区三区| 久久日韩精品一区二区五区| 一本久久a久久精品亚洲 | 欧美影院精品一区| 久久爱www久久做| 日韩理论片中文av| 欧美一区二区三区系列电影| 成人午夜激情在线| 日韩av中文字幕一区二区| 国产欧美日韩三级| 欧美精品日韩一区| av电影一区二区| 久久99日本精品| 亚洲精品国产无套在线观| 日韩一区二区电影| 色屁屁一区二区| 国产乱子伦视频一区二区三区| 亚洲影院免费观看| 中文av一区二区| 欧美成人video| 欧美日韩高清影院| 99re这里只有精品视频首页| 精品一区二区三区不卡 | 婷婷一区二区三区|