1. 程式人生 > >VC++6.0進度條的初級使用

VC++6.0進度條的初級使用

    最近在學VC6,練習下“進度條”的使用。

    ​參考了這篇部落格http://blog.sina.com.cn/s/blog_4c82872301000b0b.html,但是作者寫的程式有些亂,變數名設定的也不是很好,所以我按照自己想的,對原作者的程式進行了修改,並且按照相應的意思修改了變數名。

左邊這個就是最終的軟體介面。

實驗使用計時器訊息進行驅動,計時器需要一個引數就是“計時器跳動間隔”,每完成一次滾動就算是一次重新整理,在軟體最下面的“滾動條重新整理次數”可以設定滾動的次數。

下面是我一步步實現這個“滾動條”實驗的步驟。

1.建立MFC程式。

然後按照預設的設定,直接點選“finish”就可以了。

2.佈局

取名:

進度條IDC_PROGRESS、右側百分比進度欄IDC_PERCENT、中間“正在重新整理第x次”編輯欄IDC_NOW_TIMES、計時器跳動間隔IDC_TIMER_DELAY、滾動條跳動次數IDC_TIMER_TIMES、滾動條重新整理次數IDC_PROG_TIMES、開始鍵IDC_BUTTON_START、結束鍵IDC_BUTTON_STOP。

點ctrl+W進入“類操作”對話方塊,在Class name中選“Cjindu_testDlg”類,就能看到剛才定義的各個物件名,雙擊control ID裡的物件名就能進行變數定義,我的設定如下:


3.編寫程式碼

在Cjindu_testDlg類的標頭檔案中(雙擊Cjindu_testDlg類,就能進入其.h標頭檔案),新增變數

int prog_times;
int timer_counter;
int temp;


回到“資源列表”找到上面的對話方塊,jindu_test,雙擊“開始”就能會彈出按鍵觸發函式名定義對話方塊,預設OnButtonStart(),

在// TODO: Add your control notification handler code here下一行輸入:

//*************************************************************
prog_times = 0;
temp = 0;
timer_counter = 0;

UpdateData(TRUE);
temp = (unsigned int)m_timer_delay;
if (m_timer_delay<1)
{
MessageBox("請輸入合適的定時器配置引數");
return;
}
SetTimer(1,temp,NULL);
temp = m_timer_times;//計時器單次重新整理跳動次數
m_progress.SetRange(0,m_timer_times);//m_progress.SetRange(0,100);

UpdateData(FALSE);
//*************************************************************

同時在“停止按鈕”函式OnButtonStop() 裡輸入:

//*************************************************************
KillTimer(1);
m_now_times = 0;
m_percent = 0;
m_prog_times = 0;
m_timer_delay = 0;
m_timer_times = 0;
prog_times = 0;
temp = 0;
timer_counter = 0;
UpdateData(FALSE);
m_progress.SetPos(0);
//*************************************************************

4.新增“計時器”訊息響應

ctrl+W 調出類編輯器,在class name中選擇我們的test對話方塊類,在objectID中選擇Cjindu_testDlg,然後在右邊的Messages框裡找到WM_TIMER,雙擊,就能為程式新增計時器訊息響應函式,這時候在MemberFuction裡就能看到ON_WM_TIMER函式,再點選對話方塊右側的Edit Code按鈕,就能直接編輯計時器訊息響應函式,程式如下:

//*************************************************************
UpdateData(TRUE);
if (nIDEvent==1)//定時器觸發
{
timer_counter++;//單次重新整理中的計時器計數
m_progress.SetPos(timer_counter);//重新整理進度
//*************************
temp = timer_counter*100;
temp = temp/m_timer_times;
m_percent = temp;//寫入“百分比”
//*************************
if (timer_counter>=m_timer_times)
{
timer_counter = 0;
prog_times++;
m_now_times = prog_times;
if (prog_times>=m_prog_times)
{
prog_times = 0;
KillTimer(1);
m_percent = temp;UpdateData(FALSE);
MessageBox("時間到!");
}
}
}
UpdateData(FALSE);
//*************************************************************

現在程式應該可以運行了。