這段代碼可以在狀態行中的任意地方建立一個進度條
1.從View菜單中選擇Resource Symbols,加入一個新的ID(在本例中假設為
ID_INDICATOR_PROGRESS_PANE),讓計算機為該ID賦值也許是較好的選擇.
2. 在MainFrm.cpp中尋找indicators數組,然後在該數組中加入上面新增加的ID,
請將它放在其它ID的後面,這將使以後的進度條出現在狀態行的最右邊,如果你
不想 讓進度條出現在最右邊,你也可以將ID放置在其它你想出現的地方.
3. 打開資源文件中的字符串表,然後插入一個新字符串.你可以通過Insert菜單
來加入一個新字符表,或者在字符串表上單擊右鍵也可以完成該工作.
4. 該字符串的字符為新增的ID,後面的消息,請加入適當的空格.(加入的空格
至少要比建立的進度條要大)
現在我們已經建立了一個空的長方形,接下來我們要在這裡面放入一個進度條.
1. 在MainFrm.h中聲明一個公共變量,類型為CProgressCtrl(假設為m_progress)
2. 在MainFrm.h中聲明一個保護變量,類型為BOOL(假設為m_bCreated)
3. 在MainFrm.cpp的OnCreate()函數中,將m_bCreated初始化為FALSE:
m_bCreated = FALSE;
4. 現在當我們需要使用進度條時,我們先檢查一下是否已經建立,如果還沒有,
那麼 我們需要建立一個:
CMainFrame::OnSomeLongProcess()
{
RECT MyRect;
// substitute 4 with the zero-based index of your status bar pane.
// For example, if you put your pane first in the indicators array,
// you抎 put 0, second you抎 put 1, etc.
m_wndStatusBar.GetItemRect(4, &MyRect);
if (m_bCreated == FALSE)
{
//Create the progress control
m_Progress.Create(WS_VISIBLE|WS_CHILD, MyRect, &wndStatusBar, 1);
m_Progress.SetRange(0,100); //Set the range to between 0 and 100
m_Progress.SetStep(1); // Set the step amount
m_bCreated = TRUE;
}
// Now we抣l simulate a long process:
for (int I = 0; I <100; I++) { Sleep(20); m_Progress.StepIt(); } }
如果窗口在建立進度條之後,改變了大小,那麼進度條並不會被重新調整位置,所
以 我們必須在WM_SIZE事件中加入自己的代碼來調整該進度條的位置:
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CMDIFrameWnd::OnSize(nType, cx, cy);
RECT rc;
m_wndStatusBar.GetItemRect(4, &rc);
// Reposition the progress control correctly!
m_Progress.SetWindowPos(&wndTop, rc.left, rc.top, rc.right - rc.left,
rc.bottom - rc.top, 0);
}
這就是狀態行中實現進度條的方法,雖然看上去很長,但事實上它非常簡單.