【MFC】带进度条的状态栏
00. 目錄
文章目錄
- 00. 目錄
- 01. 案例概述
- 02. 開發(fā)環(huán)境
- 03. 關(guān)鍵技術(shù)
- 04. 程序設(shè)計(jì)
- 05. 秘笈心法
- 06. 源碼下載
- 07. 附錄
01. 案例概述
狀態(tài)欄多用于顯示程序執(zhí)行的狀態(tài)信息。但是,如果程序正在執(zhí)行一個(gè)任務(wù),狀態(tài)欄如何描述程序的執(zhí)行進(jìn)度呢?最好的方法是在狀態(tài)欄中放置一個(gè)進(jìn)度條控件,由進(jìn)度條控件顯示執(zhí)行進(jìn)度。本例實(shí)現(xiàn)了一個(gè)具有進(jìn)度條的狀態(tài)欄,效果如下圖所示。
02. 開發(fā)環(huán)境
系統(tǒng)環(huán)境:Windows 10
開發(fā)環(huán)境:Visual Studio 2019
03. 關(guān)鍵技術(shù)
在狀態(tài)欄中顯示進(jìn)度條非常簡(jiǎn)單。只要將進(jìn)度條的父窗口指定為狀態(tài)欄,再適當(dāng)設(shè)置進(jìn)度條顯示的位置就可以了。在使用進(jìn)度條控件時(shí),可以使用SetRange方法來設(shè)置進(jìn)度條控件的范圍。
語(yǔ)法格式如下:
CProgressCtrl::SetRangevoid SetRange( short nLower, short nUpper ); void SetRange32( int nLower, int nUpper );參數(shù): nLower 指定范圍的下限(缺省值是零)。 nUpper 指定范圍的上限(缺省值是100)。 說明:此函數(shù)用來設(shè)置進(jìn)度條控件范圍的上限和下限,并重畫此進(jìn)度條來反映新的范圍。成員函數(shù)SetRange32為進(jìn)度條設(shè)置32位的范圍。04. 程序設(shè)計(jì)
(1)新建一個(gè)基于對(duì)話框的工程。
(2)在對(duì)話框類中定義一個(gè)CStatusBar變量m_StatusBar和一個(gè)CProgressCtrl變量m_Progress。
(3)在對(duì)話框的OnInitDialog方法中創(chuàng)建狀態(tài)欄和進(jìn)度條。
// CMy1StatusDlg 消息處理程序BOOL CMy1StatusDlg::OnInitDialog() {CDialogEx::OnInitDialog();// 將“關(guān)于...”菜單項(xiàng)添加到系統(tǒng)菜單中。// IDM_ABOUTBOX 必須在系統(tǒng)命令范圍內(nèi)。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 設(shè)置此對(duì)話框的圖標(biāo)。 當(dāng)應(yīng)用程序主窗口不是對(duì)話框時(shí),框架將自動(dòng)// 執(zhí)行此操作SetIcon(m_hIcon, TRUE); // 設(shè)置大圖標(biāo)SetIcon(m_hIcon, FALSE); // 設(shè)置小圖標(biāo)m_StatusBar.Create(this);UINT panels[6];for (int i = 0; i < 6; i++){panels[i] = 1000 + i;}m_StatusBar.SetIndicators(panels, 6);CRect rect;GetClientRect(rect);int width = rect.Width() / 6;for (int i = 0; i < 6; i++){m_StatusBar.SetPaneInfo(i, panels[i], SBPS_NORMAL, width);}//設(shè)置面板信息m_StatusBar.SetPaneText(0, TEXT("當(dāng)前用戶"));m_StatusBar.SetPaneText(1, TEXT("滄海一笑"));m_StatusBar.SetPaneText(2, TEXT("當(dāng)前狀態(tài)"));m_StatusBar.SetPaneText(4, TEXT("日期"));//獲取當(dāng)前時(shí)間CTime time;time = CTime::GetCurrentTime();m_StatusBar.SetPaneText(5, time.Format("%Y-%m-%d"));RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);//設(shè)置定時(shí)器//SetTimer(1, 1000, NULL);m_StatusBar.GetStatusBarCtrl().GetRect(3, &rect);CRect progRect(rect.left, 2, rect.right, rect.Height() + 2);m_ProgressCtrl.Create(PBS_SMOOTH, progRect, &m_StatusBar, 1111);m_ProgressCtrl.ShowWindow(SW_SHOW);m_ProgressCtrl.SetRange(0, 100);m_ProgressCtrl.SetPos(45);return TRUE; // 除非將焦點(diǎn)設(shè)置到控件,否則返回 TRUE }05. 秘笈心法
狀態(tài)欄中進(jìn)度條的用處
在狀態(tài)欄中顯示進(jìn)度條是普遍的用法,實(shí)例中先創(chuàng)建狀態(tài)欄,確定狀態(tài)欄控件的位置后再創(chuàng)建進(jìn)度條控件,將狀態(tài)欄設(shè)置為進(jìn)度條控件的父窗體,這樣當(dāng)狀態(tài)欄的大小發(fā)生變化時(shí),可以及時(shí)通知進(jìn)行條控件。實(shí)例中并沒有實(shí)現(xiàn)這一功能,如果要實(shí)現(xiàn)這一功能需要重新定義狀態(tài)欄類,以便獲取控件大小發(fā)生改變時(shí)的消息。
06. 源碼下載
下載:【MFC】帶進(jìn)度條的狀態(tài)欄.rar
07. 附錄
參考: 《Visual C++從入門到精通(項(xiàng)目案例版)》
總結(jié)
以上是生活随笔為你收集整理的【MFC】带进度条的状态栏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【MFC】状态栏随对话框的改变而改变
- 下一篇: 【MFC】自绘对话框动画效果的状态栏