大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
目的:学习MFC 进度条控件的用法;
步骤:
新建一个对话框项目。添加控件“progress”“static”è改名了“进度”,添加两个BUTTON名字分别为“后退”“前进”,如下图:
为static控件添加CString类型的数据变量m_present;为progress添加control类型的数据变量m_pro
初始化进度条:右键classwinzerd,选中如下项目
Edit Code 后添加如下代码:
m_pro.SetRange(0,100);//设置进度条的显示范围
m_pro.SetPos(0);//进度条初始状态为显示零
inti,j,npos;
m_pro.GetRange(i,j);//得到进度条当前的显示的范围
npos=m_pro.GetPos();//得到进度条当前的进度
m_present.Format(“%4.0f%%”,(float)npos/(float)(j-i)*100.0);//在static控件中显示当前的进度
UpdateData(FALSE);//static控件现实当前的进度
SetTimer(1,500,NULL);//每隔0.5秒触发ontimer事件使其前进
returnTRUE; // return TRUE unless you set the focus to a control
处理”前进”按钮的事件:双击此按钮添加如下事件
int i,j;
m_pro.GetRange(i,j);//获取进度条表示的范围
intnpos=m_pro.GetPos();//当前进度条位置
npos+=5;//单击此按钮一次使进度条进度自动加5
if(npos>j)//如果进度条当前的进度比进度条所能表示的进度大
npos=j;//则进度条进度到最大位置不再前进
m_pro.SetPos(npos);//设置进度条新的进度
m_present.Format(“%4.0f%%”,(float)npos/(float)(j-i)*100.0);//将进度转化为百分制
UpdateData(FALSE);
处理”后退”按钮事件:双击此按钮添加如下事件
inti,j;
m_pro.GetRange(i,j);//获取当前范围
intnpos=m_pro.GetPos();//当前进度条位置
npos-=5;
if(npos<i)
npos=i;
m_pro.SetPos(npos);
m_present.Format(“%4.0f%%”,(float)npos/(float)(j-i)*100.0);
UpdateData(FALSE);
添加事件,使其每隔0.5秒前进一次:
Add FunctionèEdit Code后作如下处理:在initdialog()中添加上面红色粗体的代码
再在TIMER()中添加如下代码
void CMyDlg::OnTimer(UINT nIDEvent) //似的每隔一段时间进度条自动前进5
{
//TODO: Add your message handler code here and/or call default
if(nIDEvent==1)
{
inti,j,npos;
m_pro.GetRange(i,j);
npos=m_pro.GetPos();
m_present.Format(“%4.0f%%”,(float)npos/(float)(j-i)*100.0);
UpdateData(FALSE);
m_pro.StepIt();
}
CDialog::OnTimer(nIDEvent);
}
当然在结束程序后应该释放TIMER于是我们有这样的函数:
void CProgressinDlg::OnDestroy()
{
CDialog::OnDestroy();
KillTimer(1);
}
注意, SetStep:缺省情况下让它自动前进一格的对应的数字是多少
StepIt:自动前进
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/157796.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...