⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 progressdialog.h

📁 虚拟打印机
💻 H
字号:
/* * * progressdialog.h *   Copyright (C) 2006 Michael H. Overlin   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA      Contact at poster_printer@yahoo.com * */#ifndef PROGRESSDIALOG_H#define PROGRESSDIALOG_H#include "dialogwindow.h"#include "syncobject.h"#include "types.h"#include <windows.h>// THIS CLASS DOES NOT AUTOMATICALLY DELETE ITSELF// WHEN THE DIALOG WINDOW IS DESTROYED// SO CLIENT CODE MUST EXPLICITLY CALL DESTRUCTOR// IF THE DIALOG WAS CREATED BY DoNewThreadModalDialog // THE DESTRUCTOR, WHEN CALLED, WILL WAIT UNTIL THE NEW THREAD // TERMINATES.class ProgressDialogWindow : public ::DialogWindow, private ::SynchronizedObject {public:	struct Status {		BOOL bUserCanceled;		BOOL bErrors;		BOOL bAllDone;		BOOL operator ==(const Status& st) const ;		BOOL operator !=(const Status& st) const ;	};	ProgressDialogWindow(		IN HINSTANCE hinst, 		IN const tstring& tstrTitle, 		IN const tstring& tstrJobDescription,		IN BOOL bHideCancelButton = FALSE);	virtual ~ProgressDialogWindow();	BOOL GetStatusAllDone(void) { ProgressDialogWindow::Status status = this->GetStatus(); return status.bAllDone; }	BOOL GetStatusErrors(void) { ProgressDialogWindow::Status status = this->GetStatus(); return status.bErrors; }	BOOL GetStatusUserCanceled(void) { ProgressDialogWindow::Status status = this->GetStatus(); return status.bUserCanceled; }	void SetStatusAllDone(void) { ProgressDialogWindow::Status status = this->GetStatus(); status.bAllDone = TRUE; this->SetStatus(status); }	void SetStatusErrors(void) { ProgressDialogWindow::Status status = this->GetStatus(); status.bErrors = TRUE; this->SetStatus(status); }	ProgressDialogWindow::Status GetStatus(void) ;	void SetStatus(const ProgressDialogWindow::Status& status) ;	tstring GetStatusString(void);	void SetStatusString(const tstring& tstrStatus);	// CREATES A NEW THREAD WHICH CREATES THE MODAL DIALOG AND RETURNS.	// CLIENT THEN CALLS SetStatusString AND SetStatus TO LET USER KNOW	// CURRENT JOB STATUS, AS SOME JOB IS PERFORMED.	// IF THE bErrors STATUS FLAG IS SET, STATUS STRING IS DISPLAYED IN RED COLOR.	// WHEN bAllDone STATUS IS SET THE "DISMISS" BUTTON TEXT IS CHANGED FROM "CANCEL" TO "OK"	// AND THE "IM ALIVE" ANIMATION STOPS (ALL RADIO BUTTONS ARE CHECKED).	// IF USER PRESSES THE "DISMISS" BUTTON AND STATUS ISN'T "ALL DONE", THE bUserCancel AND bErrors FLAGS	// ARE SET .	// IF USER PRESSES THE "DISMISS" BUTTON AND THE bAllDone STATUS IS SET, DIALOG WINDOW IS DESTROYED.	// SO DIALOG CANNOT BE DISMISSED BY THE USER UNTIL THE bAllDone STATUS IS SET.	// THE NEW THREAD TERMINATES AFTER THE DIALOG IS DESTROYED.	// NOTE:  DIALOG CAN ALSO BE CREATE WITH DoModalDialog, ETC. -- THE ONLY DIFFERENCE IS THAT	// THIS METHOD CREATES A BACKGROUND THREAD TO RUN THE DIALOG.  THE DIALOG IS "THREAD SAFE" SO THAT	// ANY NUMBER OF DIFFERENT THREADS CAN CALL MEMBER ROUTINES (IRREGARDLESS HOW THE DIALOG IS CREATED).	// NOTE:  ANOTHER OPTION WOULD BE TO USE THE WIN SHELL IProgressDialog INTERFACE.	BOOL DoNewThreadModalDialog(HWND hwndParent) ;	// THE RETURN VALUE IS ONLY VALID IF ABOVE ROUTINE IS USED TO CREATE THE DIALOG, AND	// AFTER THE NEW THREAD TERMINATES (DEBUG/FIX -- COULD OVERRIDE EndDialog)	//INT_PTR GetDialogResultCode(void);protected:	// CAN ONLY BE HIDDEN WHILE STATUS bAllDone ISN'T SET	// WHEN THE STATUS bAllDone IS SET, THE BUTTON WILL BE UNHIDDEN IF NECESSARY AND	// THE TEXT CHANGED TO OK SO THE USER CAN DISMISS THE DIALOG	virtual BOOL InitMsg(WPARAM wParam, LPARAM lParam);	virtual BOOL CommandMsg(WPARAM wParam, LPARAM lParam);	virtual BOOL CommonControlColorNotifyMsg(UINT msg, WPARAM wParam, LPARAM lParam);	virtual BOOL NotificationMsg(UINT msg, WPARAM wParam, LPARAM lParam);	virtual BOOL TimerMsg(WPARAM wParam, LPARAM lParam);private:	void AnimateProgressRadioButtons(void);	void CheckAllProgressRadioButtons(void) ;	void DoStatusTick(void);	HWND GetDialogParent(void) ;	void SetDialogResultCode(INT_PTR resultCode);	BOOL m_bHideCancelButton;	ProgressDialogWindow::Status m_status;	ProgressDialogWindow::Status m_statusOld;	tstring m_tstrStatus;	tstring m_tstrOldStatus;	tstring m_tstrJobDescription;	tstring m_tstrTitle;	HANDLE m_hNewThread;	INT_PTR m_DialogResultCode;	// TRANSFER TO THE THREADPROC WHEN MODAL DIALOG IS CREATED	// IT'S SET IN DoNewThreadModalDialog WHERE THREAD IS CREATED	HWND m_hwndDialogParent;	static void __cdecl TheirThreadProc(void *pv) ;};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -