|
|
//
// arcdlg.h Autoreconnect dialog box
//
// Copyright Microsoft Corportation 2001
// (nadima)
//
#ifndef _arcdlg_h_
#define _arcdlg_h_
#define DISPLAY_STRING_LEN 256
#define MAX_ARC_CONNECTION_ATTEMPTS 20
#include "progband.h"
//
// Minimal UI - just a flashing icon, introduced for XPSP1
// where we couldn't add resources
//
//#define ARC_MINIMAL_UI 0
typedef DWORD (*PFNGDI_SETLAYOUT)(HDC, DWORD);
//
// Base class for the ARC UI
//
class CAutoReconnectUI { public: CAutoReconnectUI( HWND hwndOwner, HINSTANCE hInst, CUI* pUi); virtual ~CAutoReconnectUI();
virtual HWND StartModeless() = 0;
//
// Notifications
//
virtual VOID OnParentSizePosChange() = 0; virtual VOID OnNotifyAutoReconnecting( UINT discReason, ULONG attemptCount, ULONG maxAttemptCount, BOOL* pfContinueArc ) = 0;
virtual VOID OnNotifyConnected() = 0;
virtual BOOL ShowTopMost() = 0;
virtual HWND GetHwnd() {return _hwnd;}
virtual BOOL Destroy() = 0;
protected: //
// Private member functions
//
VOID CenterWindow( HWND hwndCenterOn, INT xRatio, INT yRatio );
VOID PaintBitmap( HDC hdcDestination, const RECT* prcDestination, HBITMAP hbmSource, const RECT *prcSource );
protected: CUI* _pUi; HWND _hwnd; HWND _hwndOwner; HINSTANCE _hInstance; //
// GDI SetLayout call
//
PFNGDI_SETLAYOUT _pfnSetLayout; HMODULE _hGDI; };
class CAutoReconnectDlg : public CAutoReconnectUI { public: CAutoReconnectDlg(HWND hwndOwner, HINSTANCE hInst, CUI* pUi); virtual ~CAutoReconnectDlg();
virtual HWND StartModeless();
virtual INT_PTR CALLBACK DialogBoxProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
static INT_PTR CALLBACK StaticDialogBoxProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
#ifndef OS_WINCE
static LRESULT CALLBACK CancelBtnSubclassProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uiID, DWORD_PTR dwRefData ); #else
static LRESULT CALLBACK CancelBtnSubclassProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); #endif
//
// Notifications
//
virtual VOID OnParentSizePosChange(); virtual VOID OnNotifyAutoReconnecting( UINT discReason, ULONG attemptCount, ULONG maxAttemptCount, BOOL* pfContinueArc ); virtual VOID OnNotifyConnected();
virtual BOOL ShowTopMost();
virtual BOOL Destroy();
private:
VOID UpdateConnectionAttempts( ULONG conAttempts, ULONG maxConAttempts );
//
// Message handlers
//
VOID OnEraseBkgnd(HWND hwnd, HDC hdc);
VOID OnPrintClient(HWND hwnd, HDC hdcPrint, DWORD dwOptions);
VOID OnDrawItem(HWND hwnd, const DRAWITEMSTRUCT *pDIS);
private: TCHAR _szConnectAttemptStringTmpl[DISPLAY_STRING_LEN]; ULONG _connectionAttempts; INT _nArcTimerID; ULONG _elapsedArcTime;
//
// Flag indicating dialog was properly initialized
//
BOOL _fInitialized;
//
// TRUE while we are continuing to arc
//
BOOL _fContinueReconAttempts;
//
// Bitmaps
//
HBITMAP _hbmBackground; HBITMAP _hbmFlag; #ifndef OS_WINCE
HBITMAP _hbmDisconImg; #endif
//
// Palette
//
HPALETTE _hPalette;
RECT _rcBackground; RECT _rcFlag; RECT _rcDisconImg;
//
// Fonts
//
HFONT _hfntTitle;
//
// Progress band
//
CProgressBand* _pProgBand;
//
// Last disconnection reason
//
UINT _lastDiscReason;
#ifdef OS_WINCE
//
// To subclass the "Cancel" button on CE
//
WNDPROC _lOldCancelProc;
//
// Brushes to paint the static ctls
//
HBRUSH _hbrTopBand; HBRUSH _hbrMidBand; #endif
};
//
// Minimal UI - just a flashing icon
//
class CAutoReconnectPlainUI : public CAutoReconnectUI { public: CAutoReconnectPlainUI(HWND hwndOwner, HINSTANCE hInst, CUI* pUi); virtual ~CAutoReconnectPlainUI();
virtual HWND StartModeless();
virtual LRESULT CALLBACK WndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
static LRESULT CALLBACK StaticPlainArcWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
//
// Notifications
//
virtual VOID OnParentSizePosChange(); virtual VOID OnNotifyAutoReconnecting( UINT discReason, ULONG attemptCount, ULONG maxAttemptCount, BOOL* pfContinueArc ); virtual VOID OnNotifyConnected(); virtual BOOL ShowTopMost(); virtual BOOL Destroy();
private: //
// Private member functions
//
//
// Message handlers
//
VOID OnEraseBkgnd(HWND hwnd, HDC hdc);
VOID OnPrintClient(HWND hwnd, HDC hdcPrint, DWORD dwOptions);
VOID OnDrawItem(HWND hwnd, const DRAWITEMSTRUCT *pDIS);
private: VOID MoveToParentTopRight(); VOID OnAnimFlashTimer(); HBITMAP LoadImageFromMemory( HDC hdc, LPBYTE pbBitmapBits, ULONG cbLen ); HRESULT LoadImageBits( LPBYTE pbBitmapBits, ULONG cbLen, LPBITMAPINFO* ppBitmapInfo, PULONG pcbBitmapInfo, LPBYTE* ppBits, PULONG pcbBits );
INT _nFlashingTimer;
//
// Flag indicating UI was properly initialized
//
BOOL _fInitialized;
//
// TRUE while we are continuing to arc
//
BOOL _fContinueReconAttempts;
//
// Bitmaps
//
HBITMAP _hbmDisconImg;
//
// Palette
//
HPALETTE _hPalette;
RECT _rcDisconImg;
//
// Last disconnection reason
//
UINT _lastDiscReason;
//
// Last hide state
//
BOOL _fIsUiVisible; };
#endif // _arcdlg_h_
|