继承CWinthread,显示动态的启动进度条

本文介绍了一种在Windows应用程序中实现启动进度条的方法,通过创建一个专用的线程CSplashThread来显示进度条,并允许主程序继续初始化过程,提供良好的用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为软件初始化硬件比较费时,不想让用户看到界面没有反应的样子,可以做了一个进度条,像WINDOWS启动时的进度条一样,来回显示

SplashThread.h

#include "StdAfx.h" #include "SplashScreen.h" CSplashScreen::CSplashScreen() { m_pSplashThread=NULL; } CSplashScreen::~CSplashScreen(void) { if ( m_pSplashThread ) { Close(); } } /// 显示窗口 bool CSplashScreen::ShowWindow(CString szMessage, UINT nTime/* =200 */) { if ( !m_pSplashThread ) { m_pSplashThread= new CSplashThread(); m_pSplashThread->m_szMessage= szMessage; m_pSplashThread->m_nTime= nTime; m_pSplashThread->CreateThread(); } return true; } /// 关闭窗口 void CSplashScreen::Close() { m_pSplashThread->PostThreadMessage( WM_QUITSPLASHSCREEN, NULL, NULL); m_pSplashThread=NULL; }

SplashThread.cpp

#include "StdAfx.h" #include "SplashThread.h" IMPLEMENT_DYNCREATE(CSplashThread, CWinThread) CSplashThread::CSplashThread(void) { m_szMessage=_T("请稍候,正在启动..."); m_nTime= 200; m_pProgress=NULL; m_bAutoDelete=TRUE; } CSplashThread::~CSplashThread(void) { } BEGIN_MESSAGE_MAP(CSplashThread, CWinThread) ON_THREAD_MESSAGE(WM_QUITSPLASHSCREEN, OnQuit) END_MESSAGE_MAP() BOOL CSplashThread::InitInstance() { m_pProgress= new COPWILLProgress(); //一定要加下面的这行,否则如果主界面线程忙碌的话,进度条会没有反应 m_pMainWnd=m_pProgress; m_pProgress->Create(m_szMessage, m_nTime); m_pProgress->ShowWindow(SW_SHOW); return TRUE; } BOOL CSplashThread::ExitInstance() { if ( m_pProgress ) { m_pProgress->DestroyWindow(); delete m_pProgress; } return TRUE; } /// 退出启动条 void CSplashThread::OnQuit(WPARAM wParam,LPARAM lParam) { PostQuitMessage(0); }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值