目录
什么是进度条对话框?
当程序中有一项任务需要较长时间时,一般可以显示一个进度条反映任务的完成情况。
当选择“查看”菜单中的“进度条对话框”菜单项时,弹出左面的对话框。设置好每次前进百分比和每两次前进的时间间隔,单击“进度条”显示,观察进度条演示。
程序的实现步骤
1.编辑对话框资源,创建类
2.显示对话框
3.实现对话框的功能:添加控件关联变量 ,添加消息响应函数
步骤1 编辑对话框资源
ID: IDD_MODALLESS_DIALOG Caption: “Modalless Dialog”
Class: CDialogModalless
ID号 | 控件 | 属性 |
IDC_PROGRESS | Progress | Border(选取框):选中 |
IDC_TIME_SLIDER | Slider | |
IDC_EDIT | Edit Box | |
IDC_PERCENT_SPIN | Spin | 选中Auto buddy(自动合作者) 和Set buddy integer(设置合作者整数) |
IDC_PROGRESS_BUTTON | Button | Caption:进度条演示 |
IDC_QUIT_BUTTON | Button | Caption:退出 |
注意:要保证Edit控件与Spin控件的TabOrder连续,且Edit控件在前。
效果图如下:
步骤2 显示对话框
使用类向导在主框架类中添加菜单的消息响应函数:
Class name:CDialogFrm
Object IDs:ID_VIEW_PROGRESSDIALOG
Messages:COMMAND
在文件DialogMainFrm.cpp中包含头文件:#include "DialogProgress.h"
void CMainFrame::OnViewProgressdialog()
{
// TODO: 在此添加命令处理程序代码
CDialogProgress dlg;
dlg.DoModal();
}
步骤3 实现对话框的功能
控件 变量类型 变量名
IDC_PERCENT_SPIN CSpinButtonCtrl m_Spin
IDC_PROGRESS CProgressCtrl m_Progress
IDC_TIME_SLIDER CSliderCtrl m_Time
2.添加消息响应函数
(1)初始化函数:
CDialogProgress::OnInitDialog()
BOOL CDialogProgress::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
//给Spin控件设置数值范围
m_Spin.SetRange(1,50);
//把文本框的初始值设为1
GetDlgItem(IDC_EDIT)->SetWindowText(TEXT("1"));
m_Time.SetRange( 0, 10 );//设置滑动的数值范围
m_Time.SetPos( 1 );//设滑动控件的初始值设为1
m_Progress.SetRange( 0, 100 );//设进度条的数值范围
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
(2)单击“进度条演示”按钮函数:
CDialogProgress::OnProgressButton()
void CDialogProgress::OnClickedProgressButton()
{
// TODO: 在此添加控件通知处理程序代码
CString temp;
// 方法一:用GetWindowText
// 得到文本框中的内容
//GetDlgItem(IDC_EDIT)->GetWindowText(temp);
// 方法二:用UpdateData将值保存至成员变量中
UpdateData(TRUE);
int nTemp = atoi(m_strEdit);
if ((nTemp < 1) || (nTemp > 50)) //判断文本框中的内容是否在设定的范围之内
{
MessageBox("输入的数据超出范围!", "Waring", MB_ICONWARNING | MB_OK);
GetDlgItem(IDC_EDIT)->SetFocus(); //把焦点设在文本框上
return; //中断程序的运行,返回
}
int nPercent, nTime, nCurPos = 0;
nPercent = m_Spin.GetPos();//得到Spin控件的值
nTime = m_Time.GetPos();//得到滑动条上当前的值
m_Progress.SetPos(0);//设置进度条当前的位置为0
while ((nCurPos += nPercent) < 100)
{
m_Progress.OffsetPos(nPercent);//在进度条上偏移nPercent位置
Sleep(1000 * nTime / 10);//延迟一定的时间间隔
}
m_Progress.SetPos(100);//设置进度条当前的位置为100
}
(3)单击“退出”按钮函数:
CDialogProgress::OnQuitButton () { OnOK(); }
运行结果展示
小结
1. 进度条控件
SetRange(),GetRange(),SetPos (),GetPos(),OffsetPos()
2. 滑杆控件
SetRange(), GetRange(),SetPos(),GetPos(),
3. 微调控件
Auto buddy,Alignment
SetRange(), GetRange(),SetPos(), GetPos()
4. 其他
Sleep()函数