121 lines
2.6 KiB
C++
121 lines
2.6 KiB
C++
/**********************************************************************/
|
|
/** Microsoft Windows/NT **/
|
|
/** Copyright(c) Microsoft Corporation, 1997 - 1998 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
busydlg.h
|
|
base class for the busy dialog
|
|
|
|
FILE HISTORY:
|
|
|
|
*/
|
|
|
|
#ifndef _BUSYDLG_H
|
|
#define _BUSYDLG_H
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWorkerThread
|
|
|
|
class CWorkerThread : public CWinThread
|
|
{
|
|
public:
|
|
CWorkerThread();
|
|
virtual ~CWorkerThread();
|
|
|
|
BOOL Start(HWND hWnd);
|
|
virtual BOOL InitInstance() { return TRUE; } // MFC override
|
|
virtual int Run() { return -1;} // MFC override
|
|
|
|
void Lock() { ::EnterCriticalSection(&m_cs); }
|
|
void Unlock() { ::LeaveCriticalSection(&m_cs); }
|
|
|
|
void Abandon();
|
|
BOOL IsAbandoned();
|
|
|
|
void AcknowledgeExiting() { VERIFY(0 != ::SetEvent(m_hEventHandle));}
|
|
|
|
protected:
|
|
virtual void OnAbandon() {}
|
|
|
|
protected:
|
|
BOOL PostMessageToWnd(UINT Msg, WPARAM wParam, LPARAM lParam);
|
|
void WaitForExitAcknowledge();
|
|
|
|
private:
|
|
CRITICAL_SECTION m_cs;
|
|
HANDLE m_hEventHandle;
|
|
|
|
HWND m_hWnd;
|
|
BOOL m_bAbandoned;
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDlgWorkerThread
|
|
|
|
class CLongOperationDialog; // fwd decl
|
|
|
|
class CDlgWorkerThread : public CWorkerThread
|
|
{
|
|
public:
|
|
CDlgWorkerThread();
|
|
|
|
BOOL Start(CLongOperationDialog* pDlg);
|
|
virtual int Run(); // MFC override
|
|
|
|
DWORD GetError() { return m_dwErr;}
|
|
|
|
protected:
|
|
virtual void OnDoAction() = 0;
|
|
|
|
DWORD m_dwErr;
|
|
|
|
private:
|
|
BOOL PostMessageToDlg();
|
|
};
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CLongOperationDialog dialog
|
|
|
|
class CLongOperationDialog : public CDialog
|
|
{
|
|
// Construction
|
|
public:
|
|
static UINT s_nNotificationMessage;
|
|
CLongOperationDialog(CDlgWorkerThread* pThreadObj, UINT nAviID = -1);
|
|
virtual ~CLongOperationDialog();
|
|
|
|
BOOL LoadTitleString(UINT nID);
|
|
BOOL LoadDescriptionString(UINT nID);
|
|
|
|
void EnableCancel(BOOL bCancel) { m_bCancel = bCancel; }
|
|
|
|
CDlgWorkerThread* GetThreadObj()
|
|
{
|
|
ASSERT(m_pThreadObj != NULL);
|
|
return m_pThreadObj;
|
|
}
|
|
|
|
UINT m_nAviID;
|
|
CString m_strTitle;
|
|
CString m_strDescription;
|
|
BOOL m_bAbandoned;
|
|
|
|
afx_msg LONG OnNotificationMessage( WPARAM wParam, LPARAM lParam);
|
|
|
|
// Implementation
|
|
protected:
|
|
// Generated message map functions
|
|
virtual BOOL OnInitDialog();
|
|
virtual void OnCancel();
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
private:
|
|
CDlgWorkerThread* m_pThreadObj;
|
|
BOOL m_bCancel;
|
|
};
|
|
|
|
#endif _BUSYDLG_H
|