?? progressdialog.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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -