|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
//文件: 进程条控件定义类
|
|
|
//主要功能:
|
|
|
// 在线程中使用进程条,进程条控件可由用户指定
|
|
|
//
|
|
|
//程序编写:
|
|
|
//日期:2011-11-15
|
|
|
//
|
|
|
//
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
#pragma once
|
|
|
#include "progressbase.h"
|
|
|
#include "AttachBase.h"
|
|
|
#include "ProcessThread.h"
|
|
|
|
|
|
namespace NProgress
|
|
|
{
|
|
|
|
|
|
class AFX_CLASS_EXPORT CProgressThreadCtrl
|
|
|
: public CProgressBase
|
|
|
, public CAttachBase
|
|
|
{
|
|
|
public:
|
|
|
CProgressThreadCtrl(void);
|
|
|
~CProgressThreadCtrl(void);
|
|
|
|
|
|
virtual bool AttachInput(void* pProgressCtrl, bool bAutoDelete = false); //参数为CProgressCtrl对象
|
|
|
|
|
|
virtual void SetProgressText(LPCTSTR lpszText);
|
|
|
virtual void SetProgressPos(int nPos);
|
|
|
virtual void SetProgressRange(int nLower, int nUpper);
|
|
|
virtual void SetProgressInfo(__int64 cur, __int64 total);
|
|
|
|
|
|
virtual bool IsCanceled(void);
|
|
|
virtual bool IsSucceed(void);
|
|
|
|
|
|
virtual void EnableSucceed(bool bEnable);
|
|
|
|
|
|
virtual void ThreadFinished(bool bSucceed); //线程执行结束调用该函数关闭线程
|
|
|
|
|
|
CProgressCtrl* GetProgress() { return (CProgressCtrl*)GetInput(); }
|
|
|
CProcessThread& GetThread() { return m_thread; }
|
|
|
|
|
|
//启动线程
|
|
|
bool RunThread() { return m_thread.Run(); }
|
|
|
bool RunAndWaitForDone(); //运行线程并等待线程结束
|
|
|
|
|
|
//取消线程
|
|
|
void CancelThread();
|
|
|
|
|
|
void SetThreadFunc(LPTHREAD_START_ROUTINE lpThreadFunc, void* pParameter);
|
|
|
//仅在不显示进程条对话框时使用
|
|
|
void SetProgressWndNull() { m_threadData.m_pProgressWnd = NULL; }
|
|
|
|
|
|
public:
|
|
|
struct AFX_CLASS_EXPORT PROGRESS_THREAD_DATA
|
|
|
{
|
|
|
//进程条对话框,由CProgressBase类派生的类对象
|
|
|
// 可以为CProgressThreadDlg对象,CProgressThreadCtrl对象
|
|
|
CProgressBase* m_pProgressWnd;
|
|
|
LPVOID m_pUserThreadParameter; //用户定义参数
|
|
|
};
|
|
|
|
|
|
//static int m_static_count; //ggff
|
|
|
protected:
|
|
|
CProcessThread m_thread;
|
|
|
PROGRESS_THREAD_DATA m_threadData;
|
|
|
|
|
|
static DWORD WINAPI __ThreadFunc__(LPVOID lpVoid); //该函数内调用用户定义的线程函数
|
|
|
|
|
|
private:
|
|
|
LPTHREAD_START_ROUTINE m_pUserThreadFunc; //外部定义的线程函数
|
|
|
};
|
|
|
|
|
|
}//namespace
|