MFC对话框程序添加弹窗进度条提示
1.建立主对话框和弹窗对话框
2.在主对话框添加按钮,进行主线程工作和弹窗显示。
3.主线程头文件申明线程,主线程工作函数和与弹窗交付的变量
static UINT ThreadProcess(LPVOID p);//主工作线程
int nNum;//主线程和弹窗交付变量
void AddNum();//主线程工作函数
4.函数
void CTestProcessBarDlg::OnBtnStart()
{
// TODO: Add your control notification handler code here
AfxBeginThread(ThreadProcess,this,THREAD_PRIORITY_NORMAL,0,0,NULL);
CProcessDlg pDlg;
pDlg.pNum=&nNum;
pDlg.DoModal();
}
UINT CTestProcessBarDlg::ThreadProcess(LPVOID p)
{
CTestProcessBarDlg *pDlg=(CTestProcessBarDlg *)p;
pDlg->AddNum();
return 0;
}
void CTestProcessBarDlg::AddNum()
{
if (nNum>=100)
{
break;
}
for (int i=0;i<=101;i++)
{
Sleep(100);
nNum=i;
}
}
5.弹窗对话框添加Process控件
6.弹窗对话框头文件
int *pNum;//与主对话框交付指针变量
static UINT ThreadWinInfo(LPVOID p);//线程操作进度条
7.弹窗对话框函数
BOOL CProcessDlg::OnInitDialog() //初始化中加入线程
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_Process.SetRange(0,100);
m_Process.SetStep(2);
AfxBeginThread(ThreadWinInfo,this);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
UINT CProcessDlg::ThreadWinInfo(LPVOID p)
{
CProcessDlg *pDlg=(CProcessDlg *)p;
while(1)
{
if (*pDlg->pNum==100)
{
break;
}
pDlg->m_Process.SetPos(*pDlg->pNum);
}
pDlg->PostMessage(WM_CLOSE);//当主线程中的变量达到100,就自动关闭弹窗对话框
return 0;
}
void CProcessDlg::OnOK()
{
// TODO: Add extra validation here
*pNum=100;
}