首页 > 系统相关 >windows之MFC进度条

windows之MFC进度条

时间:2023-10-12 15:23:17浏览次数:32  
标签:MFC 进度条 windows void 线程 Progress tips WM

windows之MFC进度条

创建UI线程

  1. 创建线程类

    在vsstudio2019中按快捷键ctrl+shift+x弹出类向导, 在类向导中添加MFC类, 选择父类为CWinThread。定义类名称点击确定即可。

  2. 关联该UI线程对应的对话框

    BOOL CProgressThread::InitInstance()
     {
         CProgressDlg dlgprogress;
         m_pMainWnd = &dlgprogress;
         dlgprogress.DoModal();
         return TRUE;
     }
    
  3. 定义线程处理消息及函数

    在头文件中定义线程处理消息宏, 需要基于WM_USER加上自定义值。如:

    #define WM_THREAD_MESSAGES      WM_USER + 8   
    

    添加对应的消息处理函数:

     // 头文件中声明
     void OnThreadMessages(WPARAM wParam, LPARAM lParam);
    
     // cpp文件中建立消息关联
     BEGIN_MESSAGE_MAP(CProgressThread, CWinThread)
         ON_THREAD_MESSAGE(WM_THREAD_MESSAGES, &CProgressThread::OnThreadMessages)
     END_MESSAGE_MAP()
    
     void CProgressThread::OnThreadMessages(WPARAM wParam, LPARAM lParam)
     {
         CProgressDlg* dlgprogress = ((CProgressDlg*)GetMainWnd());
         const int flag = (int)wParam;
         switch (flag)
         {
         case 0:
             dlgprogress->EndDialog(IDCANCEL); 
             break;
         case 1: {
             const CString tips = *(CString*)lParam;
             dlgprogress->SetTips(tips);
             }
             break;
         case 2:
             break;
         default:
             break;
         }
     }
    

    线程消息处理函数中处理进度条进度位置及信息提示, 可自定义wParamlParam来实现进度、提示传递。

创建关联的对话框

创建一个普通对话框, 添加信息提示控件CStatic及进度条控件CProgressCtrl, 设置进度条控件为来回滚动形式而非进度递增新式。这样就不用传递进度信息了。

m_progress_ctrl.SetMarquee(TRUE, 30);

要实现来回滚动的效果需要添加启用通用控件声明, 否则滚动条将不会呈现预期效果

#if defined _M_IX86
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif

封装对外接口

封装对外接口调用UI线程, 隐藏内部进度条实现。


class Progress
{
public:
	Progress();
	~Progress();

	void Start();
	void End();
	void UpdateTips(const CString& tips);


private:
	struct Impl;
	Impl* impl_;

};

在以上声明的Start()接口中创建UI线程:

void Progress::Start()
{
	impl_->thread = AfxBeginThread(RUNTIME_CLASS(CProgressThread));
}

其他接口实现如下:


void Progress::End()
{
	impl_->thread->PostThreadMessage(WM_THREAD_MESSAGES, (WPARAM)0, (LPARAM)0);
}

void Progress::UpdateTips(const CString& tips)
{
	impl_->tips = tips;
	impl_->thread->PostThreadMessage(WM_THREAD_MESSAGES, (WPARAM)1, (LPARAM)&impl_->tips);
}

最终效果

最终效果

标签:MFC,进度条,windows,void,线程,Progress,tips,WM
From: https://www.cnblogs.com/quenwaz/p/17759565.html

相关文章

  • 一键摸鱼神器火了专为Windows系统打造,老板在身后也可以很淡定
    哪个打工人,还没点摸鱼小技巧了?这不最近,有一个摸鱼工具,名叫Loaf,就有点火,还冲上过微博热搜。在你安装好应用,点一下左上角的“摸鱼”按钮后,电脑就能弹出一个假的系统更新页面:然后你就可以正大光明地掏出手机/端起咖啡杯、往后一仰摊在椅子上开始摸鱼了~老板从你背后走过,你也可以“无动......
  • linux系统和windows系统检测磁盘大小报警
    1.应用场景需要往磁盘中存储图片和或者数据,需要检测磁盘大小,当小于5GB的时候提示用户,并停止存储图片和数据,避免磁盘塞满,无法启动系统或者操作电脑;2.实现方法用一个定时器去定时查询磁盘空间大小,linux系统,采用QProess执行命令,然后解析命令返回值,获取剩余的磁盘空间voidFaceM......
  • LabWindows/CVI Scan( )函数
    背景介绍Scan()可以将字符串按照用户formatString格式说明分解成多个组件。最多可以分解29个组件。Scan()很强大且复杂,使用起来容易出错,但它却被频繁使用。Scan()函数函数头文件:#include<formatio.h>函数原型:intScan(void*Source,charFormat_String[],...);将字符......
  • 在Windows下配置Clang编译器
    PreferencesLinux&macOS平台LLVM相关工具链下载2019年,在Windows下配置Clang编译器VisualStudio2022中使用Clangclion使用clang编译Clion2020.3:如何设置Clang编译器这篇文章主要介绍如何在Windows使用Clang编译器来编译C/C++程序(在命令行下,clang是C编译器,编译C++......
  • dhcp服务器迁移---从windows server 2003到windows server 2012
    近期,工作中接触到dhcp服务器的迁移。搜索了网上的一些解决方案,很详细。以下主要是碰到的一些问题以及解决方案。由于2003的版本太老,导出来的配置文件为古老的mdb格式,而导入到2012中的格式需要为txt。 在2003中,尝试用命令(网上可找到)导出来txt格式,但是公司那台服务器实现不了......
  • Discuz! X3.5 从windows到windows的迁移
    适用场景Discuz!X3.5windows到windows的迁移,本例2016至2019准备安装IIS,安装应用程序开发,安装cgiisapi扩展isapi筛选器把之前的PHP文件夹拷到同目录下,避免版本问题和重新配置IIS,服务器节点,处理程序映射,添加模块映射 *.php FastCgiModule C:\PHP\php-cgi.exe未完待......
  • windows怎么查看端口占用情况
    Windows是广泛使用的操作系统之一,许多应用程序和服务都可能占用计算机上的端口。当端口被占用时,可能会导致其他程序无法正常工作或导致网络连接问题。因此,了解如何查看Windows上的端口占用情况非常重要。本文将介绍几种常用的方法,以帮助您查看和管理端口占用情况。Error:list......
  • PE盘安装Windows Server 2022系统
    前言我需要一台稳定且能够全天候运行的机器时,电脑原本预装的Windows10系统,虽然在日常使用场景下表现良好,但大家都知道Windows系统的自动更新太频繁了,而且无法关闭。为了解决这个问题,我决定重新安装WindowsServer系统。这里我选择了WindowsServer2022版本。WindowsSer......
  • windows 安装pyspark环境及pycharm配置
    1.安装JDKhttps://www.cnblogs.com/whiteY/p/13332708.html2.安装hadoop2.7下载hadoop2.7.1安装包链接:https://pan.baidu.com/s/1saGhaKbcvwrE4P3F5_UhZQ提取码:1234解压到指定位置3.下载winutils链接:https://pan.baidu.com/s/1L1iRZQcmaw9voQEJzO4bmA提取码:1234......
  • 安装windows11时卡在网络连接界面无法继续进行系统配置的处理方法
    1、问题描述:windows11安装后第一次开机,系统在联网界面出现如下图情况,无法继续下一步。 2.解决方法1、断电重启电脑2、按shift+F10弹出管理员命令行窗口3、输入oobe\bypassnro回车,电脑重启4、在到联网界面时,点击“我没有Internet连接选项”就可以继续进行系统设置5、进......