MFC+多线程+对话框+进度条 您所在的位置:网站首页 mfc对话框滚动条 MFC+多线程+对话框+进度条

MFC+多线程+对话框+进度条

2024-01-24 18:29| 来源: 网络整理| 查看: 265

当某段代码执行时间过长时,导致界面一直处于一个状态,不可进行其他操作时,这时使用进度条来告诉用户处理进度是相当必要的。下面介绍在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 实验室设备网 版权所有