MFC中进度控件的基本用法

来源:互联网 发布:下载切换mp3软件 编辑:程序博客网 时间:2024/05/17 04:08

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及以上版本无法实现该功能