
ProgressBarDlg.h
ProgressBarDlg.cpp
一般說來,寫任何應用程式不外乎跟使用者的互動,
我們常可以看到當程式執行時,會有一個Progress Bar顯示目前進度,
或是表示程式還在執行中。
Progress Bar的作法有很多種,比較直覺的一種是,在每個Dialog或Control中,
以Timer(WM_TIMER)來控制目前的進度,但是這麼一來的話就要在每個加入的Dialog
中添加處理Timer的Event。
最近寫的Project中剛好需要一個這樣的東西,可以秀出Progress Bar,但是因為所包含的Dialog
有上百個,所以不可能在每個Dialog中個別加入處理Progress Bar的Event,
因此有了這個想法,為何不弄個獨立的Progress Bar,一呼叫就自己執行,Function結束就
把它關掉就好了,使用方法就跟COM一樣,把所會用到COM的程式透過COM的起始巨集與
結束巨集包裝起來,一來方便使用,二來也可以達到OO中的Reusable。
基本的Idea很簡單,開一個Thread,由Thread去控制Progress Bar的進度,
當結束時送個Signal或Message給Thread,讓他自己做Termination的動作。
我在這邊提供的是一個簡單好用的Solution,並不最好的,因為我用一個Global variable去控制
Thread,當成一個結束信號,比較好的方法是透過剛剛提到的Signal或Message來控制(IPC),
如此一來也能控制Progress Bar的進度,否則就只能開與關了。
不過因為我沒時間去驗證這樣的東西,所以也就不提供出來了。
使用方法
Create一個內含Progress Bar control的Dialog,
產生一個包含ProgressBar的Dialog,並將其Dialog的ID設定為跟我所提供的source code一樣(IDD_PROGRESS_DLG)
將此Dialog中的ProgressBar control的ID設為IDC_PROGRESS(你也可以設定為任何你想要的別名,只要在source file中跟著改變就好了)
如此一來你的project就包含了Progress Bar control。
使用方法很簡單,
只要在你想要有Progress Bar跑動的地方的開頭加上BEGIN_PROGRESS_BAR()的MARCO,
並在你要結束的地方加上END_PROGRESS_BAR()的MARCO。
BEGIN_PROGRESS_BAR()
{
........................
Do something
.......................
}
END_PROGRESS_BAR()
當程式進入此一區塊,Progress Bar就會自動被喚醒並自己跑動,完全不需要其他的控制。
很方便吧,等我有空再Update能夠透過IPC或Message passing來控制Progress Bar的進度的範例。