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;
}

MFC对话框程序添加弹窗进度条提示