簡單封裝的乙個彩色進度條 原創

2021-03-31 12:16:36 字數 2775 閱讀 6198

class cgradientprogressctrl : public cprogressctrl

// 顯示百分比

void showtext(bool bshowtext = true)      // 顯示文字

public:

colorref gettextcolor(void)   // 取得字型顏色

colorref getbkcolor(void)   // 取得背景顏色

colorref getstartcolor(void)   // 取得開始顏色

colorref getendcolor(void)   // 取得結束顏色

void setstartcolor(colorref color)   // 設定字型顏色

void setendcolor(colorref color)   // 設定背景顏色

void settextcolor(colorref color)   // 設定開始顏色

void setbkcolor(colorref color)              // 設定結束顏色

private:

void draw(cpaintdc* pdc, const rect& rectclient, const int& nmaxwidth);

afx_msg void onpaint();

declare_message_map()

private:

// 變數定義

int   m_nlower   ; // 最小值

int   m_nupper   ; // 最大值

int   m_nstep           ; // 步進值

int   m_ncurpos   ; // 當前值

colorref m_clrstart          ; // 起始顏色

colorref m_clrend  ; // 結束顏色

colorref m_clrbkground  ; // 背景顏色

colorref m_clrtext  ; // 文字顏色

bool  m_bshowpercent  ; // 顯示百分比

bool  m_bshowtext  ; // 顯示文字

char  m_text[32]  ; // 文字:如顯示拷貝速度

char  m_percent[4]  ; // 文字:百分比

cbrush  m_bkgroundbrush  ; // 背景刷子

cbrush  m_tempbrush  ;        // 臨時刷子

private:

// 內嵌類

class cmemdc : public cdc   // 記憶體裝置環境

else //為相關的現有裝置準備列印

}virtual ~cmemdc()

else

}cmemdc* operator->()

operator cmemdc*()

private:

cbitmap m_bitmap;

cbitmap* m_poldbitmap;    //

cdc* m_pdc;            //

crect m_rect;      //

bool m_bmemdc;     //

};cgradientprogressctrl::cgradientprogressctrl()

cgradientprogressctrl::~cgradientprogressctrl()

begin_message_map(cgradientprogressctrl, cprogressctrl)

on_wm_paint()

end_message_map()

/// cgradientprogressctrl 訊息處理程式

void cgradientprogressctrl::setrange(int nlower, int nupper)

int cgradientprogressctrl::setstep(int nstep)

int cgradientprogressctrl::setpos(int npos)

int cgradientprogressctrl::settext(const char * ptext, bool brepaint)

return 0;

}void cgradientprogressctrl::onpaint()

// 繪製進度條本身

float maxwidth((float) m_ncurpos /(float) m_nupper*(float) rectclient.right);

draw(&dc, rectclient, (int) maxwidth);

// 文字顯示

dc.settextcolor(m_clrtext);

dc.setbkmode(transparent);

hgdiobj holdfont = ::selectobject(dc.m_hdc, ::getstockobject(default_gui_font));

if (m_bshowpercent)

if (m_bshowtext)

::selectobject(dc.m_hdc, holdfont);

// 不要呼叫 cprogressctrl::onpaint()

}void cgradientprogressctrl::draw(cpaintdc* pdc, const rect& rectclient, const int& nmaxwidth)}}

實現乙個彩色進度條

顯示序列 033 0m 關閉轉義序列 033 1m 粗體或高亮 033 5m 閃爍 前景顏色序列 033 30m 黑 033 31m 紅 033 32m 綠 033 33m 黃 033 34m 藍 033 35m 洋紅 033 36m 青 033 37m 白 背景顏色序列 與前景顏色對對應,前景色是...

封裝乙個進度條

1.首先定義乙個處理資料需要產生進度的介面和抽象類 1 namespace progress.core 26 posscesscompleted mposscesscompleted 7 thread mthread 8bool isstop 9void start 10 11public dele...

shell指令碼實現乙個彩色的進度條

首先來了解一下如何設定終端的字元顏色 終端的字元顏色由轉義序列 escape sequence 控制,是文字模式下的系統顯示功能,與具體語言無關。轉義序列以控制字元 esc 開頭。該字元的ascii碼十進位制表示為27,十六進製制表示為0x1b,八進位制表示為033。多數轉義序列超過兩個字元,故通常...