EBOOT升级进度条

VOID BspEbootUpdateShowProgressBar(BYTE phase, BYTE percent)
{
if (!g_bScreenInited || percent > 100)
return;

BspEbootUpdateProgressString(phase, 0);//,调用DrawString()来打印对应的字符串
if (percent < oldPercent)
FillRectangle(g_dwPgrBorderLeft + 1, g_dwPgrBorderTop + 1, g_dwPgrBorderLeft + PGR_BAR_WIDTH,
g_dwPgrBorderTop + PGR_BAR_HEIGHT, g_hCurrentDC->bkcolor);

oldPercent = percent;

FillRectangle(g_dwPgrBorderLeft + 1, g_dwPgrBorderTop + 1, g_dwPgrBorderLeft + PGR_BAR_WIDTH* percent / 100,
g_dwPgrBorderTop + PGR_BAR_HEIGHT, XBLUE);//设定填充宽度
..................................................................................................................................
}

参考文章:(BSP不一样 代码不同)

WINCE6开机进度条 

  大致思路,在NBoot EBoot 加开机进度条,由于WINCE 启动主要时间都花在读取NK ,因此每读取一定的页,就在屏上画一条固定高度的线,并记录画线的位置,下次接着画,直到读取完NK ,这样就产生的进度条的效果。
参考Mini2440 Nboot。

先定义进度条颜色、位置及长宽,关键代码如下:

 
  1. #define PROGRESS_BAR_R 0x00   
  2. #define PROGRESS_BAR_G 0xFF   
  3. #define PROGRESS_BAR_B 0x00   
  4.   
  5. //设置启动条的位置和长宽   
  6. #define PROGRESS_BAR_TOP    225   
  7. #define PROGRESS_BAR_LEFT   145   
  8. #define PROGRESS_BAR_WIDTH  512   
  9. #define PROGRESS_BAR_HEIGHT  20   
  10. #define PROGRESS_BAR_COLOR  ( ( (PROGRESS_BAR_R >> 3) << 11) | ((PROGRESS_BAR_G >> 2) << 5) | (PROGRESS_BAR_B >> 3) )   
#define PROGRESS_BAR_R 0x00 #define PROGRESS_BAR_G 0xFF #define PROGRESS_BAR_B 0x00 //设置启动条的位置和长宽 #define PROGRESS_BAR_TOP 225 #define PROGRESS_BAR_LEFT 145 #define PROGRESS_BAR_WIDTH 512 #define PROGRESS_BAR_HEIGHT 20 #define PROGRESS_BAR_COLOR ( ( (PROGRESS_BAR_R >> 3) << 11) | ((PROGRESS_BAR_G >> 2) << 5) | (PROGRESS_BAR_B >> 3) )

在读取NK 前计算出读取开始画线的位置

 

 

  1. unsigned  char  *LCDCurrentAddr;  
  2. LCDCurrentAddr = (unsigned char  *)LCD_ADDR + PROGRESS_BAR_TOP * LCD_WIDTH * 2 + PROGRESS_BAR_LEFT * 2; // LCD_ADDR为屏地址   
unsigned char *LCDCurrentAddr; LCDCurrentAddr = (unsigned char *)LCD_ADDR + PROGRESS_BAR_TOP * LCD_WIDTH * 2 + PROGRESS_BAR_LEFT * 2;// LCD_ADDR为屏地址

 

 

 

根据 NK 长度及进条度长度,计算出每读取多少页就画一条线,画线关键代码

  1. unsigned  short  *p = (unsigned  short  *)LCDCurrentAddr;  
  2. for  (y = 0; y < PROGRESS_BAR_HEIGHT; y++)  
  3. {  
  4.     *p = PROGRESS_BAR_COLOR;  
  5.     p += LCD_WIDTH;  
  6. }  
  7. LCDCurrentAddr += 2;  
unsigned short *p = (unsigned short *)LCDCurrentAddr; for (y = 0; y < PROGRESS_BAR_HEIGHT; y++) { *p = PROGRESS_BAR_COLOR; p += LCD_WIDTH; } LCDCurrentAddr += 2;   
 

---------------------------------------------------------------------

尊重他人劳动成果,转载请标明出处http://www.cnblogs.com/feishanm

 

你可能感兴趣的:(EBOOT升级进度条)