1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【MFC】带进度条的状态栏

【MFC】带进度条的状态栏

时间:2019-07-13 00:19:00

相关推荐

【MFC】带进度条的状态栏

00. 目录

文章目录

00. 目录01. 案例概述02. 开发环境03. 关键技术04. 程序设计05. 秘笈心法06. 源码下载07. 附录

01. 案例概述

状态栏多用于显示程序执行的状态信息。但是,如果程序正在执行一个任务,状态栏如何描述程序的执行进度呢?最好的方法是在状态栏中放置一个进度条控件,由进度条控件显示执行进度。本例实现了一个具有进度条的状态栏,效果如下图所示。

02. 开发环境

系统环境:Windows 10

开发环境:Visual Studio

03. 关键技术

在状态栏中显示进度条非常简单。只要将进度条的父窗口指定为状态栏,再适当设置进度条显示的位置就可以了。在使用进度条控件时,可以使用SetRange方法来设置进度条控件的范围。

语法格式如下:

CProgressCtrl::SetRangevoid SetRange( short nLower, short nUpper );void SetRange32( int nLower, int nUpper );参数: nLower 指定范围的下限(缺省值是零)。 nUpper 指定范围的上限(缺省值是100)。 说明:此函数用来设置进度条控件范围的上限和下限,并重画此进度条来反映新的范围。成员函数SetRange32为进度条设置32位的范围。

04. 程序设计

(1)新建一个基于对话框的工程。

(2)在对话框类中定义一个CStatusBar变量m_StatusBar和一个CProgressCtrl变量m_Progress。

(3)在对话框的OnInitDialog方法中创建状态栏和进度条。

// CMy1StatusDlg 消息处理程序BOOL CMy1StatusDlg::OnInitDialog(){CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。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);}}// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE);// 设置大图标SetIcon(m_hIcon, FALSE);// 设置小图标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);}//设置面板信息m_StatusBar.SetPaneText(0, TEXT("当前用户"));m_StatusBar.SetPaneText(1, TEXT("沧海一笑"));m_StatusBar.SetPaneText(2, TEXT("当前状态"));m_StatusBar.SetPaneText(4, TEXT("日期"));//获取当前时间CTime time;time = CTime::GetCurrentTime();m_StatusBar.SetPaneText(5, time.Format("%Y-%m-%d"));RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);//设置定时器//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; // 除非将焦点设置到控件,否则返回 TRUE}

05. 秘笈心法

状态栏中进度条的用处

在状态栏中显示进度条是普遍的用法,实例中先创建状态栏,确定状态栏控件的位置后再创建进度条控件,将状态栏设置为进度条控件的父窗体,这样当状态栏的大小发生变化时,可以及时通知进行条控件。实例中并没有实现这一功能,如果要实现这一功能需要重新定义状态栏类,以便获取控件大小发生改变时的消息。

06. 源码下载

下载:【MFC】带进度条的状态栏.rar

07. 附录

参考: 《Visual C++从入门到精通(项目案例版)》

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。