|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
//文件: 在线程中使用进程条对话框基类
|
|
|
//主要功能:
|
|
|
// 在线程中使用进程条
|
|
|
//程序编写:
|
|
|
//日期:2011-08-30
|
|
|
//
|
|
|
//
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
#pragma once
|
|
|
#include "ProgressBase.h"
|
|
|
#include "ProgressThreadCtrl.h"
|
|
|
|
|
|
|
|
|
namespace NProgress
|
|
|
{
|
|
|
|
|
|
class AFX_CLASS_EXPORT CProgressThreadBase
|
|
|
{
|
|
|
public:
|
|
|
CProgressThreadBase(CWnd* pParentWnd = NULL);
|
|
|
virtual ~CProgressThreadBase(void);
|
|
|
|
|
|
///< 判断是否可以启动线程,当返回false时,将不启动线程
|
|
|
virtual bool IsCanThread() { return true; }
|
|
|
|
|
|
//显示进程条对话框并启动线程
|
|
|
bool DoModal();
|
|
|
//不显示进程条对话框启动线程
|
|
|
bool StartThread();
|
|
|
//设置进程条对话框显示的标题及是否允许取消操作
|
|
|
void SetProgressInfo(LPCTSTR lpszDlgTitle=NULL, bool bAllowCancel=true);
|
|
|
//设置进程条的显示进度及显示信息
|
|
|
bool SetProgressInfo(__int64 cur, __int64 total);
|
|
|
|
|
|
void SetProgressText(LPCTSTR lpszText);
|
|
|
void SetProgressPos(int nPos);
|
|
|
void SetProgressRange(int nLower, int nUpper);
|
|
|
|
|
|
bool IsCanceled(void);
|
|
|
bool IsSucceed(void);
|
|
|
void EnableSucceed(bool bEnable);
|
|
|
|
|
|
CProgressBase* GetProgress() { return m_pProgress; }
|
|
|
|
|
|
//绑定进程条控件后,并设置m_bShowDlg状态为false时,则使用指定进程条显示
|
|
|
// 如果不进行绑定进程条控件,则不显示进程条并启动线程
|
|
|
void AttachProgressCtrl(CProgressCtrl* pProgressCtrl) { m_threadCtrl.AttachInput(pProgressCtrl); }
|
|
|
|
|
|
enum EProgressMode
|
|
|
{
|
|
|
showNothing = 0, //不显示进程条
|
|
|
showProgressCtrl= 1, //显示进程条为指定控件,需要调用AttachProgressCtrl函数
|
|
|
showProgressDlg = 2, //显示进程条对话框
|
|
|
};
|
|
|
|
|
|
void SetProgressShowMode(EProgressMode pm) { m_showMode = pm; }
|
|
|
|
|
|
protected:
|
|
|
void SetProgressWnd(CProgressBase* pProgressWnd) { m_pProgress = pProgressWnd; }
|
|
|
static DWORD WINAPI _ThreadFunc(LPVOID lpVoid);
|
|
|
|
|
|
//需要重写的函数
|
|
|
virtual bool DoThreadWork() = 0; //执行线程处理的工作
|
|
|
|
|
|
private:
|
|
|
CProgressBase* m_pProgress;
|
|
|
CWnd* m_pParentWnd;
|
|
|
LPCTSTR m_lpszDlgTitle;
|
|
|
bool m_bAllowCancel;
|
|
|
CProgressThreadCtrl m_threadCtrl;
|
|
|
EProgressMode m_showMode; //进程条显示模式
|
|
|
};
|
|
|
|
|
|
}//namespace
|
|
|
|