// -------------------------------------------------------------------------- // Module Name: TurnOffDialog.h // // Copyright (c) 2000, Microsoft Corporation // // Class that implements presentation of the Turn Off Computer dialog. // // History: 2000-04-18 vtan created // 2000-05-17 vtan updated with new dialog // -------------------------------------------------------------------------- #ifndef _TurnOffDialog_ #define _TurnOffDialog_ #include "Tooltip.h" // -------------------------------------------------------------------------- // CTurnOffDialog::CTurnOffDialog // // Purpose: Implements the "Turn Off Dialog" feature. // // History: 2000-04-18 vtan created // 2000-05-17 vtan updated with new dialog // 2001-01-19 vtan updated with more new visuals // -------------------------------------------------------------------------- class CTurnOffDialog { private: enum { BUTTON_STATE_REST = 0, BUTTON_STATE_DOWN, BUTTON_STATE_HOVER, BUTTON_STATE_MAX, BUTTON_GROUP_TURNOFF = 0, BUTTON_GROUP_STANDBY, BUTTON_GROUP_RESTART, BUTTON_GROUP_MAX }; static const int MAGIC_NUMBER = 48517; private: CTurnOffDialog (void); CTurnOffDialog (const CTurnOffDialog& copyObject); const CTurnOffDialog& operator = (const CTurnOffDialog& assignObject); public: CTurnOffDialog (HINSTANCE hInstance); ~CTurnOffDialog (void); DWORD Show (HWND hwndParent); void Destroy (void); static DWORD ShellCodeToGinaCode (DWORD dwShellCode); static DWORD GinaCodeToExitWindowsFlags (DWORD dwGinaCode); private: bool IsShiftKeyDown (void) const; void PaintBitmap (HDC hdcDestination, const RECT *prcDestination, HBITMAP hbmSource, const RECT *prcSource); bool IsStandByButtonEnabled (void) const; void RemoveTooltip (void); void FilterMetaCharacters (TCHAR *pszText); void EndDialog (HWND hwnd, INT_PTR iResult); void Handle_BN_CLICKED (HWND hwnd, WORD wID); void Handle_WM_INITDIALOG (HWND hwnd); void Handle_WM_DESTROY (HWND hwnd); void Handle_WM_ERASEBKGND (HWND hwnd, HDC hdcErase); void Handle_WM_PRINTCLIENT (HWND hwnd, HDC hdcPrint, DWORD dwOptions); void Handle_WM_ACTIVATE (HWND hwnd, DWORD dwState); void Handle_WM_DRAWITEM (HWND hwnd, const DRAWITEMSTRUCT *pDIS); void Handle_WM_COMMAND (HWND hwnd, WPARAM wParam); void Handle_WM_TIMER (HWND hwnd); void Handle_WM_MOUSEMOVE (HWND hwnd, UINT uiID); void Handle_WM_MOUSEHOVER (HWND hwnd, UINT uiID); void Handle_WM_MOUSELEAVE (HWND hwnd); static INT_PTR CALLBACK CB_DialogProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK ButtonSubClassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uiID, DWORD_PTR dwRefData); private: const HINSTANCE _hInstance; HBITMAP _hbmBackground; HBITMAP _hbmFlag; HBITMAP _hbmButtons; HFONT _hfntTitle; HFONT _hfntButton; HPALETTE _hpltShell; RECT _rcBackground; RECT _rcFlag; RECT _rcButtons; LONG _lButtonHeight; HWND _hwndDialog; INT_PTR _iStandByButtonResult; UINT _uiHoverID; UINT _uiFocusID; UINT _uiTimerID; bool _fSuccessfulInitialization; bool _fSupportsStandBy; bool _fSupportsHibernate; bool _fShiftKeyDown; bool _fDialogEnded; CTooltip* _pTooltip; }; #endif /* _TurnOffDialog_ */