/*++ Copyright (C) Microsoft Corporation, 1994 - 1998 All rights reserved. Module Name: GenWin.hxx Abstract: Generic window handler Author: Albert Ting (AlbertT) 21-May-1994 Revision History: --*/ #ifndef _GENWIN_HXX #define _GENWIN_HXX /******************************************************************** Generic window class to transform windows into pseudo-objects. Normally, the wndprocs do not have any C++ objects associated with them (they are static functions; all instance data must be stored in HWND GetWindowLong data). This is a simple thunk that takes a message, looks up the object based on GetWindowLong( hwnd, GWL_USERDATA ) then call the object. In order to use this class, derive classes from this class then override the nHandleMessage virtual function. When your window receives a message, your derived class will get called from the virtual member function. ********************************************************************/ class MGenericWin { SIGNATURE( 'genw' ) ALWAYS_VALID SAFE_NEW public: MGenericWin( VOID ); virtual ~MGenericWin( VOID ); VAR( HWND, hwnd ); BOOL bSetText( LPCTSTR pszTitle ); VOID vForceCleanup( VOID ); static LPARAM APIENTRY SetupWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); private: MGenericWin( const MGenericWin & ); MGenericWin & operator =( const MGenericWin & ); virtual LPARAM nHandleMessage( UINT uMsg, WPARAM wParam, LPARAM lParam ) = 0; static LPARAM APIENTRY ThunkWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); }; /******************************************************************** Generic class to transform property pages into pseudo-objects. Same as GenericWin except used for dialog boxes. ********************************************************************/ class MGenericProp { SIGNATURE( 'genp' ) ALWAYS_VALID SAFE_NEW public: MGenericProp( VOID ); virtual ~MGenericProp( VOID ); VAR( HWND, hDlg ); BOOL bSetText( LPCTSTR pszTitle ); VOID vForceCleanup( VOID ); static INT_PTR APIENTRY SetupDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); static UINT CALLBACK CallbackProc( HWND hDlg, UINT uMsg, LPPROPSHEETPAGE ppsp ); protected: VOID vSetDlgMsgResult( LONG_PTR lResult ); VOID vSetParentDlgMsgResult( LRESULT lResult ); private: MGenericProp( const MGenericProp & ); MGenericProp & operator =( const MGenericProp & ); virtual BOOL bHandleMessage( UINT uMsg, WPARAM wParam, LPARAM lParam ) = 0; virtual BOOL bCreate( VOID ); virtual VOID vDestroy( VOID ); }; /******************************************************************** Generic class to transform dialog into pseudo-objects. Same as GenericWin except used for dialog boxes. ********************************************************************/ class MGenericDialog { SIGNATURE( 'gend' ) ALWAYS_VALID SAFE_NEW public: MGenericDialog( VOID ); virtual ~MGenericDialog( VOID ); VAR( HWND, hDlg ); BOOL bSetText( LPCTSTR pszTitle ); VOID vForceCleanup( VOID ); static INT_PTR APIENTRY SetupDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); protected: VOID vSetDlgMsgResult( LONG_PTR lResult ); VOID vSetParentDlgMsgResult( LRESULT lResult ); private: MGenericDialog( const MGenericDialog & ); MGenericDialog & operator =( const MGenericDialog & ); virtual BOOL bHandleMessage( UINT uMsg, WPARAM wParam, LPARAM lParam ) = 0; }; /******************************************************************** MSingletonWin Used to enforce a single window based on a printer name and type. (The name and type are composed to form a printer pidl.) Note: this class must be bRegisterWindowed and destroyed in the same thread--the one that owns the window. ********************************************************************/ class MSingletonWin { SIGNATURE( 'siwn' ) SAFE_NEW public: VAR( HWND, hwnd ); VAR( TString, strPrinterName ); VAR( BOOL, bModal ); MSingletonWin( LPCTSTR pszPrinterName, HWND hwnd = NULL, BOOL bModal = FALSE ); virtual ~MSingletonWin( VOID ); BOOL bValid( VOID ); BOOL bRegisterWindow( DWORD dwType ); BOOL bIsWindowPresent( VOID ); private: HANDLE _hClassPidl; // // Operator = and copy not defined. // MSingletonWin& operator=( MSingletonWin& rhs ); MSingletonWin( MSingletonWin& rhs ); }; #endif