大家好,又见面了,我是你们的朋友全栈君。
打开游戏或者其他一些软件时,时常会看到刚开始时有一个进度条在加载,有点酷炫的感觉。对于MFC进度条的使用,下面用一个案例介绍一下。
案例:进度条单步加载和自动连续加载
步骤:
1.按下图在对话框中添加一个进度条,一个编辑框,和3个按钮,并为进度条添加一个控件变量
进度条变量:m_Progress
2.在初始化函数中对进度条进行初始化,代码如下:
BOOL CSpinDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//XXXXX
//默认代码
//XXXXX
m_Progress.SetRange(0,100);//设置进度条数值变化范围
m_Progress.SetPos(1); //设置进度条默认初始进度
CString str;
int nPos = m_Progress.GetPos(); // 获取进度条的当前位置
str.Format("%d",nPos);
GetDlgItem(IDC_EDIT_Progress)->SetWindowText(str + _T("%"));//显示进度条初始进度
return TRUE; // return TRUE unless you set the focus to a control
}
运行,此时进度条位置在1%的位置上:
3.为3个按钮分别添加点击事件:
单步加载 按钮:
//单步控制进度条
void CSpinDlg::OnBtnSingleGo()
{
m_Progress.SetStep (5); //设置进度条步长
m_Progress.StepIt(); //按照当前步长更新位置
int nPos = m_Progress.GetPos();// 获取进度条的当前位置
CString str;
str.Format("%d",nPos);
GetDlgItem(IDC_EDIT_Progress)->SetWindowText(str + _T("%"));//显示进度条进度
}
自动加载 按钮:
//定时器:控制进度条自动加载
void CSpinDlg::OnBtnGo()
{
SetTimer(1,500,NULL); //开启自动加载
}
//定时器内部具体实现进度条的加载
void CSpinDlg::OnTimer(UINT nIDEvent)
{
m_Progress.SetStep (5);//步长
m_Progress.StepIt();//按步长更新位置
int nPos = m_Progress.GetPos();// 获取进度条当前位置
CString str;
str.Format("%d",nPos);
GetDlgItem(IDC_EDIT_Progress)->SetWindowText(str + _T("%"));//显示进度条进度
CDialog::OnTimer(nIDEvent);
}
停止加载 按钮:
//关闭定时器,停止进度条的加载
void CSpinDlg::OnBtnStop()
{
KillTimer(1);
}
运行起来,点击单步加载,进度条将按照每步为5的长度进行加载
点击自动加载,进度条将按照每步为5的长度进行自动连续加载,直到按下停止加载按钮才会停止加载。
结语:谢谢!
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160338.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...