MFC+多线程+对话框+进度条 | 您所在的位置:网站首页 › mfc对话框滚动条 › MFC+多线程+对话框+进度条 |
当某段代码执行时间过长时,导致界面一直处于一个状态,不可进行其他操作时,这时使用进度条来告诉用户处理进度是相当必要的。下面介绍在MFC下,如何使用多线程在对话框中控制进度条。 首先,创建一个对话框,并建立与其对应的类,当然需要添加一个进度条控件。如下图 MFC+多线程+对话框+进度条 然后在对话框对应的类中添加两个函数: void CJingDuTiao::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default CDialog::OnTimer(nIDEvent); //CDialog::OnTimer(nIDEvent); m_ctrlProgress.SetPos(CGlobal::progress); if(CGlobal::progress == -1) this->EndDialog(true); } void CJingDuTiao::OnShowWindow(BOOL bShow, UINT nStatus) { CDialog::OnShowWindow(bShow, nStatus); // TODO: Add your message handler code here this->KillTimer(1); this->SetTimer(1,20, NULL); m_ctrlProgress.SetRange(1,1000); } 其中progress是在类CGlobal中定义的一个静态变量,且初始值为0. m_ctrlProgress为进度条的变量。 再在主程序(MainFrm)中添加两个子进程需要处理的函数 如: UINT function(LPVOID pParam) { for(int i = 0; i < 1000; i++){ CGlobal::progress++; Sleep(50); } CGlobal::progress = -1; return 0; } 这个函数(function)是用来控制进度条变化的函数。 UINT function1(LPVOID pParam) { //============= 在此添加需要处理长时间的代码 //============== return 0; } 最后在需要运动进度条的地方添加 AfxBeginThread(function1,this);//申请一个进程来执行function1,也就是主程序处理代码。 AfxBeginThread(function,this);//在申请一个进程来执行function,控制进度条的变化。 dlg1->DoModal();//模态显示对话框,此时主程序代码执行到此,不往下执行,直至对话框关闭,但是两个 //子进程始终在运行中。 其中dlg1是对话框的一个对象。 这样一个同事处理数据且显示进度条对话框的功能就实现了。 |
CopyRight 2018-2019 实验室设备网 版权所有 |