MFC 之 Progress Control 控件的使用
添加控件
在工具栏中拖拽一个进度条控件到主对话框中对应位置,完成控件的添加。
初始化控件
添加控件完成后,接下来我们需要在 OnInitDialog() 函数中对控件进行初始化,添加如下代码:
如果在类向导里添加了控件的变量,则可以直接用
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
m_ProgressCtrl.SetRange(0, 100);
如果没有设置变量,就是用指针定义。
/* 对进度条控件进行初始化 */
CProgressCtrl* m_ProgressCtrl= (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);
m_ProgressCtrl->SetRange(0, 100);
显示功能设计
设计 Progress Control 控件的显示
CProgressCtrl* m_proCtrl = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);
for (int i = 0; i <= 100; i++)
{
m_proCtrl->SetPos(i);
Sleep(100);
}
通过 SetPos() 函数对进度条进行设置,上述代码可以放在Button下执行。想要让进度条自动运行,可以添加定时器去实现。也可以通过线程去完成。这里直接展示定时器的使用方式。
在资源管理器里选中控件,然后右键打开类向导,进入后选择【消息】页,双击WM_TIMER,添加定时器的处理程序
添加如下代码
void LoadingDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
int nPos, nMin, nMax;
m_ProgressCtrl.GetRange(nMin, nMax);
nPos = m_ProgressCtrl.GetPos();
nPos++;
if (nPos >= nMax)
{
KillTimer(1);//1是定时器的ID
//nPos = 0;
CDialog::OnCancel();//进度条满了后,关闭对话框
}
m_ProgressCtrl.SetPos(nPos);//设置位置,进度条位置发生变化。
CDialogEx::OnTimer(nIDEvent);
}
同时在OnInitDialog()函数里添加定时器的开始指令。
SetTimer(1, 100, NULL);