00. 目录

文章目录

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

01. 案例概述

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

02. 开发环境

系统环境:Windows 10

开发环境:Visual Studio 2019

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++从入门到精通(项目案例版)》

【MFC】带进度条的状态栏相关推荐

  1. web app升级—带进度条的App自动更新

    带进度条的App自动更新,效果如下图所示:   技术:vue.vant-ui.5+ 封装独立组件AppProgress.vue: <template><div><van- ...

  2. 带进度条的ASP无组件断点续传下载代码

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <%Option Explicit%> <% '= ...

  3. atitit. 文件上传带进度条 atiUP 设计 java c# php

    atitit. 文件上传带进度条atiUP设计java c# php 1. 设计要求 1 2. 原理and架构 1 3. ui 2 4. spring mvc 2 5. springMVC.xml 3 ...

  4. Android更新带进度条的通知栏

    在网上查询了下,Android版本号更新通知栏带进度条,醉了,基本都是复制过来.有的代码不全,连源代码下载都没有,有下载也须要积分.还不能用.真黑心啊!! 之前自己也写过自己定义通知栏Notifica ...

  5. 用MediaPlayer做个带进度条可后台的音乐播放器

    传送到github看源码 下载apk试用 密码:rukn 前言 想在天朝听音乐还是有些难度的, 一般来说, 两三个app还是要的. 那何不尝试自己做个手机播放器, 听个爽呢?!今天就带大家先做个简单的 ...

  6. [整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)...

    /// <summary> /// 通过调用MSSQL的SQLDMO.DLL文件来实现备份数据库 /// 1.首先在在项目中引用SQLDMO.DLL文件. /// 2.在引用中的SQLDM ...

  7. php带截切图片上传_PHP大文件切割上传并带进度条功能示例

    本文实例讲述了PHP大文件切割上传并带进度条功能.分享给大家供大家参考,具体如下: 前面一篇介绍了PHP大文件切割上传功能,这里再来进一步讲解PHP大文件切割上传并带进度条功能. 项目结构图: 14- ...

  8. 自定义带进度条的WebView , 增加获取web标题和url 回掉

    1.自定义ProgressWebView package com.app.android05; import android.content.Context; import android.graph ...

  9. Android开发之带进度条的WebView

    老套路先看效果: 直接上代码: 区分java和kotlin版本 Java版本: package com.example.progresswebview;import android.os.Bundle ...

最新文章

  1. 神经科学如何影响人工智能?看DeepMind在NeurIPS2020最新《神经科学人工智能》报告,126页ppt...
  2. 你以为的ASP.NET文件上传大小限制是你以为的吗
  3. HashMap HashTable和ConcurrentHashMap的区别
  4. Android自定义进度条
  5. 牛客题霸 NC1 大数加法
  6. js算法初窥06(算法模式03-函数式编程)
  7. Android之如何ubuntu环境下在手机里面快速找到apk的位置然后拉下来
  8. java 语音匹配,java-语音识别,是否可以通过正则表达式确定用户所说的内容?
  9. 奉劝那些想学编程的人
  10. node.js用get方式获取网页中的链接
  11. 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集
  12. Java成员变量查找_Java中的成员变量和局部变量
  13. 实战 SQL!金融机构可疑支付交易的监测 | 原力计划
  14. Java与MySQL连接错误_mysql连接错误
  15. 单片机固件烧录器 Firmware Writer Android APP
  16. 反向代理——Nginx
  17. 虚拟机未安装音频设备_如何使用虚拟音频设备录制PC的音频
  18. 矩阵的转置matlab,矩阵的转置表示 matlab中矩阵的转置怎么表示
  19. HBuilderX 打包 vue 项目生成 apk
  20. 第五次作业—— 四则运算“软件”开发

热门文章

  1. TCP与UDP网络编程总结(一)
  2. Ruby Regexp
  3. .net 浏览器请求过程(图)
  4. python列表索引超出范围 等于啥_python中的“列表索引超出范围”
  5. 笔记本网络计算机和设备不可见,xp电脑不显示无线网络的七种原因和解决方法...
  6. 每日程序C语言34-利用指针将输入的三个数排序
  7. andrew ng machine learning week4 神经网络
  8. 【知了堂学习笔记】java 编写几种常见排序算法3
  9. ==与equals 的使用比较
  10. 《DB 查询分析器》中断SQL语句的执行