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

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

?? listbox.c

?? 使用coderwarrior打開 內(nèi)含中文字庫
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
*********************************************************************************************************
*                                                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;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频一区二区三区在线观看| 国产一区二区精品久久| 色综合网站在线| 一区二区三区在线视频免费观看| 欧美性xxxxx极品少妇| 日韩电影免费在线观看网站| 日韩欧美成人一区| 国产精品亚洲视频| 亚洲免费在线电影| 欧美精品欧美精品系列| 久久99久久精品| 中国av一区二区三区| 一本一道波多野结衣一区二区| 一区二区激情视频| 欧美xxxxxxxxx| 成人av网站在线观看免费| 亚洲欧美日韩一区二区| 69堂国产成人免费视频| 国产在线视频一区二区| 国产精品全国免费观看高清| 在线观看国产91| 老司机免费视频一区二区| 国产欧美日韩亚州综合| 91亚洲精品一区二区乱码| 午夜国产不卡在线观看视频| 亚洲精品一区二区三区在线观看 | 一本色道久久综合精品竹菊| 首页国产丝袜综合| 国产精品沙发午睡系列990531| 欧美午夜不卡视频| 国产成人精品影视| 五月天视频一区| 国产精品免费免费| 91超碰这里只有精品国产| 国产激情精品久久久第一区二区 | 欧美成人性战久久| 91在线国产福利| 美女脱光内衣内裤视频久久网站| 国产精品女人毛片| 欧美成人一区二区三区 | 欧美日韩亚洲高清一区二区| 久久99精品久久久久婷婷| 亚洲精品一二三| 久久久精品影视| 欧美电影在哪看比较好| 成人aa视频在线观看| 玖玖九九国产精品| 亚洲第一福利视频在线| 1024成人网色www| 欧美精品一区在线观看| 91精品国产91综合久久蜜臀| 色94色欧美sute亚洲线路一久 | 欧美一区二区啪啪| 色94色欧美sute亚洲线路一ni | 色综合一个色综合| 不卡免费追剧大全电视剧网站| 美女在线一区二区| 秋霞午夜鲁丝一区二区老狼| 亚洲国产一区在线观看| 亚洲黄色小视频| 亚洲人精品午夜| ㊣最新国产の精品bt伙计久久| 久久精品人人做人人爽人人| 精品国免费一区二区三区| 日韩一区二区在线看片| 欧美日本国产一区| 欧美日本乱大交xxxxx| 欧美日韩国产一级二级| 精品污污网站免费看| 欧美日免费三级在线| 欧美色成人综合| 欧美日韩成人在线| 欧美老年两性高潮| 3d动漫精品啪啪1区2区免费| 日韩亚洲欧美成人一区| 日韩欧美黄色影院| 国产欧美精品一区二区三区四区| 日韩欧美亚洲一区二区| 日韩精品资源二区在线| 精品成人一区二区三区四区| 久久嫩草精品久久久精品一| 久久久久久一二三区| 久久久www免费人成精品| 久久日一线二线三线suv| 26uuu精品一区二区在线观看| 久久美女高清视频| 国产日韩亚洲欧美综合| 国产精品久久久久桃色tv| 成人欧美一区二区三区小说| 一区二区三区日韩欧美精品| 亚洲五码中文字幕| 日本sm残虐另类| 国产成人精品一区二区三区四区 | 亚洲福利视频三区| 天天爽夜夜爽夜夜爽精品视频| 奇米色一区二区| 国产精品中文字幕一区二区三区| 成人h动漫精品一区二| 色综合天天狠狠| 欧美巨大另类极品videosbest | 亚洲成人精品在线观看| 日韩精品亚洲专区| 高清不卡在线观看av| 欧洲国产伦久久久久久久| 日韩无一区二区| 国产精品你懂的| 手机精品视频在线观看| 福利一区二区在线| 欧美午夜精品久久久| 久久午夜电影网| 亚洲激情自拍偷拍| 久久精品国产精品亚洲精品| 国产91精品一区二区麻豆网站 | 国产一区二区剧情av在线| 99久久精品国产一区二区三区| 欧美日韩一卡二卡三卡| 久久久精品一品道一区| 亚洲综合成人网| 国产经典欧美精品| 欧美乱熟臀69xxxxxx| 亚洲国产高清aⅴ视频| 日韩成人dvd| 91网站最新地址| 精品国产乱码久久久久久蜜臀| 国产精品久久久一区麻豆最新章节| 亚洲va欧美va人人爽| 9久草视频在线视频精品| 欧美一区二区三区在线电影 | 国产亚洲欧美日韩日本| 日本午夜一本久久久综合| 91麻豆文化传媒在线观看| 久久久久久久网| 青青草伊人久久| 欧美性xxxxxxxx| 亚洲精品视频在线| 国产精品一级黄| 日韩三级视频在线看| 亚洲午夜久久久久久久久电影网| 成人免费视频一区二区| 久久午夜免费电影| 麻豆极品一区二区三区| 欧美另类高清zo欧美| 亚洲精品菠萝久久久久久久| 国产福利一区二区| 欧美精品一区二区三区在线播放| 亚洲午夜影视影院在线观看| 波多野结衣亚洲一区| 久久久www成人免费毛片麻豆| 日本aⅴ免费视频一区二区三区| 欧美性大战久久久久久久蜜臀| 亚洲视频在线一区| 成年人午夜久久久| 国产精品日韩成人| av网站一区二区三区| 久久久五月婷婷| 狠狠色综合日日| 精品国产伦一区二区三区观看体验| 奇米影视一区二区三区| 久久久91精品国产一区二区精品| 免费在线观看视频一区| 在线播放一区二区三区| 石原莉奈在线亚洲三区| 制服丝袜一区二区三区| 日韩精品免费专区| 欧美一区二区三区播放老司机| 日韩黄色免费网站| 欧美一二三区在线| 久久av资源站| 精品国产乱码久久久久久蜜臀| 久久精品免费观看| 久久天堂av综合合色蜜桃网| 国产成人欧美日韩在线电影| 中文字幕av不卡| av综合在线播放| 亚洲国产欧美另类丝袜| 欧美日韩第一区日日骚| 蜜臀久久99精品久久久画质超高清| 精品国产一区二区三区av性色 | 成a人片国产精品| 亚洲女人小视频在线观看| 在线免费观看日本一区| 五月激情综合色| 精品国产伦理网| 成人黄色电影在线| 亚洲午夜影视影院在线观看| 日韩一区二区在线观看视频| 国产精品一区二区在线观看不卡 | 久久久久亚洲蜜桃| 高潮精品一区videoshd| 亚洲女同ⅹxx女同tv| 91精品国产麻豆国产自产在线 | 97se亚洲国产综合自在线不卡| 最新不卡av在线| 欧美日韩高清一区二区不卡| 国产一区在线视频| 亚洲欧美乱综合| 精品免费日韩av| 色婷婷国产精品| 精品一区二区三区免费毛片爱| 成人欧美一区二区三区1314|