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

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

?? progbar.c

?? 使用coderwarrior打開 內(nèi)含中文字庫
?? C
字號:
/*
*********************************************************************************************************
*                                                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        : ProgBar.c
Purpose     : Progress bar for emWin GSC
---------------------------END-OF-HEADER------------------------------
*/


#include <stdlib.h>
#include <string.h>
#include "GUI_Private.h"
#include "ProgBar.h"
#include "Widget.h"

#if GUI_WINSUPPORT

/*********************************************************************
*
*       Private config defaults
*
**********************************************************************
*/

#ifndef PROGBAR_DEFAULT_FONT
  #define PROGBAR_DEFAULT_FONT GUI_DEFAULT_FONT
#endif

#ifndef PROGBAR_DEFAULT_BARCOLOR0
  #define PROGBAR_DEFAULT_BARCOLOR0 0x555555
#endif

#ifndef PROGBAR_DEFAULT_BARCOLOR1
  #define PROGBAR_DEFAULT_BARCOLOR1 0xAAAAAA
#endif

#ifndef PROGBAR_DEFAULT_TEXTCOLOR0
  #define PROGBAR_DEFAULT_TEXTCOLOR0 0xFFFFFF
#endif

#ifndef PROGBAR_DEFAULT_TEXTCOLOR1
  #define PROGBAR_DEFAULT_TEXTCOLOR1 0x000000
#endif

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

typedef struct {
  WIDGET Widget;
  int v;
  const GUI_FONT* pFont;
  GUI_COLOR BarColor[2];
  GUI_COLOR TextColor[2];
  WM_HMEM hpText;
  I16 XOff, YOff;
  I16 TextAlign;
  int Min, Max;
/*  I16 Options; */
  #if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
    int DebugId;
  #endif  
} PROGBAR_Obj;

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/

/* None */

/*********************************************************************
*
*       Macros for internal use
*
**********************************************************************
*/

#define Invalidate(h) WM_InvalidateWindow(h)

#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
  #define OBJECT_ID 0x4569   /* Magic nubmer, should be unique if possible */
  #define INIT_ID(p)   p->DebugId = OBJECT_ID
  #define DEINIT_ID(p) p->DebugId = OBJECT_ID+1
#else
  #define INIT_ID(p)
  #define DEINIT_ID(p)
#endif

/*********************************************************************
*
*       Static routines
*
**********************************************************************
*/

#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
  PROGBAR_Obj* PROGBAR_h2p(PROGBAR_Handle h) {
    PROGBAR_Obj* p = (PROGBAR_Obj*)WM_HMEM2Ptr(h);
    if (p) {
      if (p->DebugId != OBJECT_ID) {
        GUI_DEBUG_ERROROUT("PROGBAR.C: Wrong handle type or Object not init'ed");
        return 0;
      }
    }
    return p;
  }
  #define PROGBAR_H2P(h) PROGBAR_h2p(h)
#else
  #define PROGBAR_H2P(h) (PROGBAR_Obj*) WM_HMEM2Ptr(h)
#endif

/*********************************************************************
*
*       _FreeText
*/
static void _FreeText(PROGBAR_Handle hObj) {
  PROGBAR_Obj* pObj = PROGBAR_H2P(hObj);
  WM_FREEPTR(&pObj->hpText);
}

/*********************************************************************
*
*       _Value2X
*/
static int _Value2X(PROGBAR_Handle hObj, int v) {
  PROGBAR_Obj* pObj = PROGBAR_H2P(hObj);
  int xsize  = WM_GetWindowSizeX(hObj);
  int Min = pObj->Min;
  int Max = pObj->Max;
  if (v<Min)
	  v = Min;
  if (v> Max)
	  v = Max;
  return (xsize* (I32)(v-Min)) / (Max-Min);
}

/*********************************************************************
*
*       _DrawPart
*/
static void _DrawPart(PROGBAR_Obj* pThis,
                     int Index,
										 int xText, int yText,
										 const char* pText)
{
    GUI_SetBkColor(pThis->BarColor[Index]);
    GUI_SetColor(pThis->TextColor[Index]);
    GUI_Clear();
    GUI_GotoXY(xText,yText);
		GUI_DispString(pText);
}

/*********************************************************************
*
*       _Paint
*/
static void _Paint(PROGBAR_Handle hObj) {
  PROGBAR_Obj* pObj = PROGBAR_H2P(hObj);
  WM_HWIN hWin = hObj;
  int xsize = WM_GetWindowSizeX(hWin);
  int ysize = WM_GetWindowSizeY(hWin);
  int tm;
  GUI_SetFont(pObj->pFont);
  {
    int x1;
    int FontSizeY = GUI_GetFontSizeY();
    int xText;
    int yText = (ysize-FontSizeY)/2;
    GUI_RECT r;
    int XSizeChar;
    char ac[5];   /* Just enough for the percentage */
    char*s = ac;
    const char* pText;
    if (pObj->hpText) {
      pText = (const char*) WM_HMEM2Ptr(pObj->hpText);
    } else {
      GUI_AddDecMin((100*(I32)(pObj->v-pObj->Min))/(pObj->Max-pObj->Min), &s);
      *s = '%';
			*(s+1) =0;
			pText = &ac[0];
		}
/* Calculate text positions */
    XSizeChar = GUI_GetStringDistX(pText);
    x1 = _Value2X(hObj, pObj->v);
    switch (pObj->TextAlign &GUI_TA_HORIZONTAL) {
    case GUI_TA_CENTER:
      xText  = (xsize-XSizeChar)/2;
			break;
    case GUI_TA_LEFT:
      xText  = 0;
			break;
    case GUI_TA_RIGHT:
      xText  = xsize-XSizeChar-1;
			break;
		}
    xText += pObj->XOff;
    yText += pObj->YOff;
    tm = GUI_SetTextMode(GUI_TM_TRANS);
/* Draw left bar */
    r.x0=0; r.x1=x1-1; r.y0=0; r.y1 = GUI_YMAX;
    WM_SetUserClipArea(&r);
    _DrawPart(pObj, 0, xText, yText, pText);
/* Draw right bar */
    r.x0=r.x1+1; r.x1=GUI_XMAX;
    WM_SetUserClipArea(&r);
    _DrawPart(pObj, 1, xText, yText, pText);
  }
  WM_SetUserClipArea(NULL);
  GUI_SetTextMode(tm);
}

/*********************************************************************
*
*       _Delete
*/
void _Delete(PROGBAR_Handle hObj) {
  _FreeText(hObj);
  DEINIT_ID(PROGBAR_H2P(hObj));
}

/*********************************************************************
*
*       _Callback
*/
static void _Callback (WM_MESSAGE*pMsg) {
  PROGBAR_Handle hObj = (PROGBAR_Handle)pMsg->hWin;
  switch (pMsg->MsgId) {
  case WM_PAINT:
    _Paint(hObj);
    return;
  case WM_DELETE:
    _Delete(hObj);
    break;
  }
  WM_DefaultProc(pMsg);
}

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

PROGBAR_Handle PROGBAR_CreateAsChild(int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int Id, int Flags) {
  /* Create the window */
  PROGBAR_Handle hObj =WM_CreateWindowAsChild(x0, y0, xsize, ysize, hParent, 
                                              Flags, _Callback, sizeof(PROGBAR_Obj) - sizeof(WM_Obj));
  if (hObj) {
    PROGBAR_Obj* pObj = (PROGBAR_Obj*) WM_HMEM2Ptr(hObj);
    INIT_ID(pObj);
    pObj->Widget.Id       = Id;
    /* init member variables */
    pObj->pFont =GUI_DEFAULT_FONT;
    pObj->BarColor[0] = 0x555555;
    pObj->BarColor[1] = 0xaaaaaa;
    pObj->TextColor[0] = 0xffffff;
    pObj->TextColor[1] = 0x000000;
    pObj->TextAlign    = GUI_TA_CENTER;
    pObj->Max =100;
    pObj->Min =0;
  }
  return hObj;
}

PROGBAR_Handle PROGBAR_Create(int x0, int y0, int xsize, int ysize, int Flags) {
  return PROGBAR_CreateAsChild(x0, y0, xsize, ysize, 0, 0, Flags) ;
}

PROGBAR_Handle  PROGBAR_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb) {
  PROGBAR_Handle  hThis;
  GUI_USE_PARA(cb);
  hThis = PROGBAR_CreateAsChild(
    pCreateInfo->x0 + x0, pCreateInfo->y0 + y0, pCreateInfo->xSize, pCreateInfo->ySize,
    hWinParent, pCreateInfo->Id, pCreateInfo->Flags);
  return hThis;
}

/*********************************************************************
*
*       Exported routines:  Various methods
*
**********************************************************************
*/
void PROGBAR_SetValue(PROGBAR_Handle hObj, int v) {
  PROGBAR_Obj* pObj;
  GUI_RECT r;
  if (hObj) {
    WM_LOCK();
    pObj= PROGBAR_H2P(hObj);
    /* Put v into legal range */
    if (v < pObj->Min)
	    v = pObj->Min;
    if (v > pObj->Max)
	    v = pObj->Max;
    if (pObj->v != v) {
      /* Invalidate */
      if (pObj->hpText) {
        /* Calculate invalid area */
        r.x0 = _Value2X(hObj, pObj->v);
        r.x1 = _Value2X(hObj, v);
        /* Make sure x0 <= x1 */
		    if (r.x0 > r.x1) {
			    int t = r.x0;
			    r.x0 = r.x1;
			    r.x1 = t;
		    }
		    r.y0 =0;
		    r.y1 =4095;
        WM_InvalidateRect(hObj,&r);
	    } else {
        Invalidate(hObj);
	    }
      pObj->v = v;                         /* Update stored value */
    }
    WM_UNLOCK();
  }
}

void PROGBAR_SetFont(PROGBAR_Handle hObj, const GUI_FONT* pfont) {
  PROGBAR_Obj* pObj;
  if (hObj) {
    WM_LOCK();
    pObj = PROGBAR_H2P(hObj);
    pObj->pFont = pfont;
    Invalidate(hObj);
    WM_UNLOCK();
  }
}

void PROGBAR_SetBarColor(PROGBAR_Handle hObj, int index, GUI_COLOR color) {
  PROGBAR_Obj* pObj;
  if (hObj) {
    WM_LOCK();
    pObj = PROGBAR_H2P(hObj);
    pObj->BarColor[index] = color;
    Invalidate(hObj);
    WM_UNLOCK();
  }
}

void PROGBAR_SetTextColor(PROGBAR_Handle hObj, int index, GUI_COLOR color) {
  PROGBAR_Obj* pObj;
  if (hObj) {
    WM_LOCK();
    pObj = PROGBAR_H2P(hObj);
    pObj->TextColor[index] = color;
    Invalidate(hObj);
    WM_UNLOCK();
  }
}

void PROGBAR_SetText(PROGBAR_Handle hObj, const char* s) {
  PROGBAR_Obj* pObj;
  WM_HMEM hMem;
  if (hObj) {
    WM_LOCK();
    pObj = PROGBAR_H2P(hObj);
    _FreeText(hObj);
    if (s != NULL) {
      hMem = WM_ALLOC(strlen(s)+1);
      strcpy((char *) WM_HMEM2Ptr(hMem), s);
      pObj->hpText = hMem;
    }
    Invalidate(hObj);
    WM_UNLOCK();
  }
}

void PROGBAR_SetTextAlign(PROGBAR_Handle hObj, int Align) {
  PROGBAR_Obj* pObj;
  if (hObj) {
    WM_LOCK();
    pObj = PROGBAR_H2P(hObj);
    pObj->TextAlign = Align;
    Invalidate(hObj);
    WM_UNLOCK();
  }
}

void PROGBAR_SetTextPos(PROGBAR_Handle hObj, int XOff, int YOff) {
  PROGBAR_Obj* pObj;
  if (hObj) {
    WM_LOCK();
    pObj = PROGBAR_H2P(hObj);
    pObj->XOff = XOff;
    pObj->YOff = YOff;
    Invalidate(hObj);
    WM_UNLOCK();
  }
}

void PROGBAR_SetMinMax(PROGBAR_Handle hObj, int Min, int Max) {
  PROGBAR_Obj* pObj;
  if (hObj) {
    WM_LOCK();
    pObj = PROGBAR_H2P(hObj);
    if (Max > Min) {
      if ((Max != pObj->Max) || (Min != pObj->Min)) {
        pObj->Min = Min;
        pObj->Max = Max;
        Invalidate(hObj);
      }
    }
    WM_UNLOCK();
  }
}

#else

void WIDGET_Progbar(void) {} /* avoid empty object files */

#endif /* GUI_WINSUPPORT */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久亚洲精品国产精品紫薇| 香蕉久久夜色精品国产使用方法| 99久久久精品| 一个色综合网站| 日韩精品一区二区三区中文精品| 国产成人超碰人人澡人人澡| 综合激情成人伊人| 日韩精品在线一区| 色吧成人激情小说| 成人免费视频视频在线观看免费| 日韩激情在线观看| 亚洲色图色小说| 2020国产精品| 91精品久久久久久久91蜜桃| 成人免费电影视频| 日本成人在线看| 亚洲一区二区三区四区不卡| 国产精品午夜电影| **欧美大码日韩| 久久久一区二区| 精品999在线播放| 欧美一级黄色片| 日韩欧美综合一区| 精品国产一二三| 日韩精品一区二区三区中文精品| 欧美久久一二三四区| 91超碰这里只有精品国产| 欧美日韩和欧美的一区二区| 日本高清成人免费播放| 成人深夜福利app| thepron国产精品| 99久久精品国产毛片| 一本大道久久a久久综合婷婷| 97国产精品videossex| 99精品热视频| 欧美精选在线播放| 8x8x8国产精品| 久久综合九色综合97婷婷| 国产日产欧美一区| 亚洲色图20p| 午夜电影网亚洲视频| 精品一区二区三区视频在线观看 | 东方欧美亚洲色图在线| 不卡的av在线| 欧美刺激脚交jootjob| 国产精品视频观看| 婷婷久久综合九色综合伊人色| 久久www免费人成看片高清| 成人动漫精品一区二区| 欧美肥妇bbw| 日韩美女啊v在线免费观看| 极品少妇一区二区三区精品视频 | 久久综合色婷婷| 一区二区免费在线播放| 国产成人在线网站| 制服丝袜中文字幕亚洲| 亚洲免费在线观看| 国产成人综合网站| 久久综合给合久久狠狠狠97色69| 亚洲欧美日韩国产成人精品影院| 免费看日韩精品| 欧美一区二区三区在线电影| 亚洲成人tv网| 777久久久精品| 欧美96一区二区免费视频| 欧美日本一区二区三区| 五月婷婷综合在线| 欧美日本国产视频| 午夜视频在线观看一区二区| 在线综合+亚洲+欧美中文字幕| 日本一区二区视频在线| 99国产欧美久久久精品| ●精品国产综合乱码久久久久| 成人的网站免费观看| 亚洲日本va在线观看| 欧美日韩国产在线播放网站| 免费看精品久久片| 日本一区二区三区在线不卡| 91麻豆精东视频| 亚洲mv大片欧洲mv大片精品| 久久亚洲二区三区| 91福利小视频| 国产在线播放一区二区三区| 17c精品麻豆一区二区免费| 欧美日免费三级在线| 另类欧美日韩国产在线| 综合久久给合久久狠狠狠97色| 91麻豆精品国产综合久久久久久| 国产乱子伦视频一区二区三区| 成人欧美一区二区三区在线播放| 91精品国产综合久久久久久漫画 | 亚洲免费观看高清完整版在线观看| 欧美日韩精品欧美日韩精品| 国产一区欧美日韩| 亚洲午夜精品久久久久久久久| 26uuu亚洲| 91精品国产品国语在线不卡| 成人激情免费视频| 粉嫩欧美一区二区三区高清影视| 五月天婷婷综合| 亚洲人成在线播放网站岛国| 久久蜜臀精品av| 日韩欧美中文字幕公布| 91国产丝袜在线播放| 99久免费精品视频在线观看 | 国产一区二区福利| 狠狠色狠狠色综合日日91app| 亚洲视频电影在线| 专区另类欧美日韩| 中文字幕成人在线观看| 国产日韩欧美精品在线| 久久久久久久免费视频了| 精品国产自在久精品国产| 欧美不卡一二三| 日韩免费高清视频| 久久综合给合久久狠狠狠97色69| 久久综合久久综合亚洲| 国产色一区二区| 中文字幕第一区二区| 亚洲精品自拍动漫在线| 午夜激情综合网| 国产精品一区三区| 欧美羞羞免费网站| 日本不卡一区二区| 亚洲免费观看高清完整版在线观看 | 欧美美女黄视频| 欧美中文字幕一区二区三区亚洲 | 95精品视频在线| 日本久久电影网| 欧美性色黄大片| 欧美一级片在线观看| 日韩一级免费观看| 精品久久久久久亚洲综合网| 欧美大片在线观看| 日韩一区欧美小说| 精品电影一区二区| 国产精品丝袜一区| 婷婷一区二区三区| 成人丝袜18视频在线观看| 91麻豆精品国产91久久久久久| 中文字幕一区二区日韩精品绯色| 一级女性全黄久久生活片免费| 麻豆高清免费国产一区| av在线综合网| 久久久精品日韩欧美| 亚洲第一成人在线| 97久久超碰国产精品| 精品噜噜噜噜久久久久久久久试看| 国产精品情趣视频| 丝袜脚交一区二区| 欧美在线一二三| 久久久久久久久久久久久久久99| 亚洲成人免费看| 777亚洲妇女| 美腿丝袜亚洲一区| 亚洲精品一区二区三区影院| 天天综合天天综合色| 亚洲国产精品精华液网站| 天堂久久久久va久久久久| 日韩一区二区三区在线视频| 大桥未久av一区二区三区中文| 亚洲免费在线电影| wwwwww.欧美系列| 99视频在线观看一区三区| 亚洲成av人片在线| 欧美sm美女调教| 福利一区福利二区| 一个色在线综合| 69精品人人人人| 国产在线视频一区二区| 日本一区二区免费在线观看视频 | 国产亚洲午夜高清国产拍精品| 亚洲午夜视频在线| 69久久夜色精品国产69蝌蚪网| 成人深夜在线观看| 美脚の诱脚舐め脚责91 | 亚洲精品国产a| 欧美一级夜夜爽| 成人在线综合网站| 亚洲午夜三级在线| 日韩欧美中文字幕一区| 99re66热这里只有精品3直播| 视频一区二区三区在线| 欧美大胆人体bbbb| 色婷婷国产精品| 亚洲免费在线观看视频| 日韩欧美国产精品| 波多野结衣欧美| 亚洲一级片在线观看| 国产精品国产三级国产有无不卡| 欧美亚洲综合另类| 91毛片在线观看| 国精产品一区一区三区mba桃花| 久久精品国内一区二区三区| 国产一区二区三区免费播放| 韩国一区二区在线观看| 亚洲伊人色欲综合网| 日韩av一区二区在线影视| 国产一区二区网址| 色播五月激情综合网|