MFC中进度控件的基本用法

原创 2017年09月27日 21:56:41

MFCCProgressCtrl类来表示进度控件。在默认方式下,进度条控件沿水平方向放置,进度用一系列的方块来表示。

1 进度控件的创建

可以通过两种方法创建进度控件,一种是在Visaul Studio的资源编辑器中通过工具箱添加;另一种是通过代码添加。

1.1 在资源编辑器中添加

一般基于对话框的MFC程序中,使用资源编辑器的方式来添加进度控件。在“资源视图”中打开对话框资源,之后在右侧的“工具栏”中将Progress Control控件拖入到对话框上,并且调整其位置和大小,如图1所示。

 

1 通过“工具栏”添加进度控件

之后,选择右侧的“属性”按键,通过属性栏设置进度控件的属性,如图2所示。

 

2 设置进度控件属性

其中,Smooth属性表示进度控件中的进度条是虚线还是实线,将该属性设置为True则是实线,False是虚线;Vertical属性表示控件是否是垂直的,True表示垂直,False表示水平。

1.2 通过代码添加

基于文档/视图的MFC程序一般通过代码来添加进度控件。通过CProgressCtrl::Create()函数实现控件的创建。该函数的格式为

BOOL Create(
  DWORD dwStyle,
  const RECT& rect,
  CWnd* pParentWnd,
  UINT nID
);
其中,参数dwStyle表示进度控件的风格;rect表示控件的位置和大小;pParentWnd指定了控件的父窗口的指针;nID是控件的ID。如果创建成功,则返回值是TRUE,否则返回值是FALSE

可以使用如下代码创建进度控件

m_Progress_Control_Manual.Create(WS_CHILD|WS_VISIBLE|PBS_SMOOTH|PBS_VERTICAL, CRect(10,10, 500, 60), this, 10001);
其中,m_Progress_Control_ManualCProgressCtrl类的对象,需要注意的是该对象必须是类的成员变量,而不能是局部变量,否则控件无法显示。Create()函数的参数中,WS_CHILD表示该控件是子控件,WS_VISIBLE表示控件是可见的;PBS_SMOOTHPBS_VERTICAL分别对应在“1.1 在资源编辑器中添加”中提到的Smooth属性和Vertical属性。

2 进度控件中进度条的活动

进度控件的作用就是通过进度条的活动来表示某个动作进展的情况。因此,在创建了进度控件之后,接下来就是要控制进度条的活动了。在控制进度条活动时,首先要设置进度条活动的范围,之后设置其的位置来实现进度条的活动。

2.1 设置进度条活动的范围

通过CProgressCtrl::SetRange()函数设置进度条活动的范围。该函数的格式为

void SetRange(
  short nLower,
  short nUpper
);
其中,参数nLowernUpper分别表示进度条活动的起始位置和结束位置。

m_Progress_Control_Manual.SetRange(0, 100);
以上代码的功能是将进度条的活动范围设置到了0~100之间,m_Progress_Control_Manual是在“1.2 通过代码添加”中定义的CProgressCtrl类的对象。

2.2 设置进度条位置

可以通过三种方法设置进度条位置:第一种是直接设置位置;第二种是设置位置的偏移量;第三种是设置步进。

2.2.1 直接设置进度条位置

通过CProgressCtrl::SetPos()直接设置进度条的位置。该函数的作用是设置进度条的位置并且重画进度控件。该函数的格式为

int SetPos(int nPos);
其中,参数nPos表示要设置的进度条位置,该位置必须在“2.1 设置进度条活动的范围”中设置的范围之内;返回值是设置新位置之前,进度条所在的位置。

m_Progress_Control_Manual.SetPos(50);
以上代码的作用是将进度条的位置设置到整个进度控件的中间位置。

2.2.2 设置进度条位置的偏移量

通过CProgressCtrl::OffsetPos()函数设置控制条新位置相对于之前位置的偏移量。该函数的格式为

int OffsetPos(int nPos);
其中,参数nPos表示新位置相对于之前位置的偏移量;返回值是设置新位置之前,进度条所在的位置。

for(int i=0; i<4; ++i)
{
m_Progress_Control_Manual.OffsetPos((100-0)/4);
Sleep(100);
}
以上代码的功能是进度条每次前进整个进度控件的四分之一,分四次前进到进度控件的最顶端。

2.2.2 设置进度条的步进

进度条的步进指的是进度条每次前进的长度。通过CProgressCtrl::SetStep()函数设置步进,该函数的格式为

int SetStep(int nStep);
该函数的参数为新的步进值;返回值是设置新步进之前的步进值。

在设置了进度条步进之后,需要调用CProgressCtrl::StepIt()函数来使得进度条按照设置的步进前进。

m_Progress_Control_Manual.SetStep((100-0)/4);
for(int i=0; i<4; ++i)
{
m_ProgressCtrl.StepIt();
Sleep(100);
}
以上代码与2.2.2 设置进度条位置的偏移量”中的代码功能相同。

3 设置进度条颜色及进度控件背景颜色

通过向控件发送PBM_SETBARCOLOR消息或者调用CProgressCtrl::SetBarColor()函数来设置进度条的颜色;通过向控件发送PBM_SETBKCOLOR消息或者调用CProgressCtrl::SetBkColor()函数来设置进度控件背景颜色。

3.1 发送改变颜色的消息

通过CProgressCtrl类的对象,调用该类的SendMessage()函数向控件发送改变颜色的消息。

m_ProgressCtrl.SendMessage(PBM_SETBARCOLOR, 0, (LPARAM)RGB(255, 0, 0));
m_ProgressCtrl.SendMessage(PBM_SETBKCOLOR, 0, (LPARAM)RGB(0, 255, 0));
对于SendMessage()函数,第一个参数表示要发送的消息,第二个参数和第三个参数均表示消息的信息,其中,第三个参数表示要设置的颜色。以上代码的功能是将进度条颜色设置为红色,将进度控件背景颜色设置为绿色。

3.2 调用CProgressCtrl类控制颜色的成员函数

通过调用CProgressCtrl::SetBarColor()函数和CProgressCtrl::SetBkColor()函数来设置颜色。这两个成员函数最终还是向控件发送了改变颜色的消息。

m_ProgressCtrl.SetBarColor(RGB(255, 0, 0));
m_ProgressCtrl.SetBkColor(RGB(0, 255, 0));
以上代码与3.1 发送改变颜色的消息”中代码的功能相同。

经测试,修改进度条颜色的功能只能在VC++6.0中实现,VS2008及以上版本无法实现该功能

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java基本控件用法简介

VC用MFC开发的圆形进度条控件

DownLoad Src VC用MFC开发的圆形进度条控件 visualsan@yahoo.cn NUAA zss 在NBA2007游戏里,还有很多科幻电影里,经常可以看到圆形进度条。有的用来显...
  • Qsir
  • Qsir
  • 2017-07-25 12:21
  • 326

MFC 状态栏 定时器 进度条 菜单 和 浏览器控件

创建对话框 1.状态栏 在头文件中添加公有成员CStatusBar m_stateBar; // 状态栏 CStatusBar m_stateBar; 然后在初始化函数中添加代码来显示状态栏 /...

Android( 基本控件)、progressBar+Handler(进度条)、AutoCompleteTextView(单行自动补全)、MultiAutoCompleteTextView(多行补全)

AutoCompleteTextView 自动补全 线程实现异步刷新数据

Android基本界面控件六-进度条

5.5 进度条 5.5.1 ProgressBar 图5.5.1 ProgressBar android.widget. ProgressBar,继承自android.vie...

MFC中怎样将位图写入指定的Picture控件中,两种方式:1 加载已有位图 2读取位图文件;另外CreateDIBitmap的用法和StretchDIBits用法举例

注意着两种方式都要事先在对话框中拖picture控件,将其ID改为:IDC_PHOTO 看这篇文章之前建议先看一下下面这篇文章: VC下显示位图的几种方法     http://blo...

MFC树形控件(CTreeCtrl)用法(上)

树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点。MFC中使用CTreeCtrl类来封装树形控件的各种操作。通过调用 BOO...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)