windows-nt/Source/XPSP1/NT/net/mmc/common/busydlg.h
2020-09-26 16:20:57 +08:00

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