/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/ /* bltdlg.hxx Dialog support for BLT This file depends on bltcons.h, bltwin.hxx, uibuffer.hxx, and billions of other files. FILE HISTORY RustanL 20-Nov-1990 Created RustanL 04-Mar-1991 Changed DIALOG_WINDOW::Process format beng 14-May-1991 Hacked for separate compilation terryk 28-Jul-1991 Added FilterMessage to DIALOG_WINDOW beng 30-Sep-1991 Added DLGLOAD declaration KeithMo 24-Mar-1992 Moved IDRESOURCE to BLTIDRES.HXX. KeithMo 07-Aug-1992 Redesigned help file management. KeithMo 13-Oct-1992 Moved PWND2HWND to BLTPWND.HXX. DavePr 03-Jun-2002 Fixing DLGPROC for Win64 */ #ifndef _BLT_HXX_ #error "Don't include this file directly; instead, include it through blt.hxx" #endif // _BLT_HXX_ #ifndef _BLTDLG_HXX_ #define _BLTDLG_HXX_ #include "bltwin.hxx" #include "bltevent.hxx" #include "bltpump.hxx" #include "bltidres.hxx" #include "bltpwnd.hxx" #include "uibuffer.hxx" DLL_CLASS DIALOG_WINDOW; // forward decl's DLL_CLASS DLGLOAD; DLL_CLASS ASSOCHWNDPDLG; // Define an OWNER_WINDOW attribute which keeps the dialog hidden #define OWIN_ATTR_HIDDEN ((DWORD)0x1) enum DLG_PROCESS_STATE { // Note. The following values are assumed to be in this order, i.e., // their values should reflect the chronological move through the // states. DLG_PROCESS_STATE_ACTIVE is defined as 0 so as to increase // the efficiency of the message loop in DIALOG_WINDOW::Process. // DLG_PROCESS_STATE_INITIALIZING = -1, DLG_PROCESS_STATE_ACTIVE = 0, DLG_PROCESS_STATE_DISMISSED = 1 }; #if defined(UNICODE) #define DLG_CHAR_SET_DEFAULT FALSE // unicode build #else // !UNICODE #define DLG_CHAR_SET_DEFAULT TRUE // ansi build #endif // UNICODE /************************************************************************* NAME: DLGLOAD SYNOPSIS: Loads a dialog from an application resource or template INTERFACE: DLGLOAD() - ctor ~DLGLOAD() - ctor QueryHwnd() - returns window handle PARENT: BASE USES: IDRESOURCE CAVEATS: For the private use of DIALOG_WINDOW, really HISTORY: beng 30-Sep-1991 Created beng 01-Nov-1991 Uses IDRESOURCE; remove BUFFER ctor KeithMo 07-Feb-1993 Allow override of default charset. DavePr 03-Jun-2002 Fixing DLGPROC for Win64 **************************************************************************/ DLL_CLASS DLGLOAD: public BASE { private: HWND _hwnd; public: DLGLOAD( const IDRESOURCE & idrsrcDlg, HWND hwndOwner, DLGPROC dlgProc, BOOL fAnsiDialog ); DLGLOAD( const BYTE * pbTemplate, UINT cbTemplate, HWND hwndOwner, DLGPROC dlgProc, BOOL fAnsiDialog ); ~DLGLOAD(); HWND QueryHwnd() const { return _hwnd; } }; /************************************************************************* NAME: ASSOCHWNDPDLG SYNOPSIS: Associate a dialog-pointer with a window INTERFACE: HwndToPdlg() PARENT: ASSOCHWNDTHIS HISTORY: beng 30-Sep-1991 Created **************************************************************************/ DLL_CLASS ASSOCHWNDPDLG: private ASSOCHWNDTHIS { NEWBASE(ASSOCHWNDTHIS) public: ASSOCHWNDPDLG( HWND hwnd, const DIALOG_WINDOW * pdlg ) : ASSOCHWNDTHIS( hwnd, pdlg ) { } static DIALOG_WINDOW * HwndToPdlg( HWND hwnd ) { return (DIALOG_WINDOW *)HwndToThis(hwnd); } }; /******************************************************************** NAME: DIALOG_WINDOW SYNOPSIS: Dialog window class INTERFACE: DIALOG_WINDOW() - constructor ~DIALOG_WINDOW() - destructor QueryRobustHwnd() - virtual replacement of the owner_window class Process() - do a callback to the Dialog winproc FilterMessage() - filter out the proper message type. Dismiss() - dismiss the dialog DismissMsg() - dismisses the dialog after presenting a message MayRun() - virtual callout; return FALSE to abort dialog after painted, but before run PARENT: OWNER_WINDOW, HAS_MESSAGE_PUMP USES: DLG_PROCESS_STATE, ASSOCHWNDPDLG, DLGLOAD, IDRESOURCE HISTORY: RustanL 20-Nov-1990 Created beng 14-May-1991 Added DlgProc member terryk 28-Jul-1991 Added FilterMessage function beng 30-Sep-1991 Win32 conversion beng 07-Oct-1991 Uses HAS_MESSAGE_PUMP beng 31-Oct-1991 Added dialog validation beng 01-Nov-1991 Uses IDRESOURCE; remove BUFFER ctor beng 30-Mar-1992 Added MayRun beng 18-May-1992 Added OnScrollBar{,Thumb} members KeithMo 07-Feb-1993 Allow override of default charset. JonN 03-Aug-1995 OnCtlColor DavePr 03-Jun-2002 Fixing DLGPROC for Win64 ********************************************************************/ DLL_CLASS DIALOG_WINDOW : public OWNER_WINDOW, public HAS_MESSAGE_PUMP { private: // _procinstDlg is the proc instance of BltDlgProc. // CODEWORK - should really be a static object. // //PROC_INSTANCE _procinstDlg; // This object loads the dialog from the named resource. // DLGLOAD _dlg; // This object lets the window find its pwnd when it is entered // from Win (which doesn't set up This pointers, etc.) // ASSOCHWNDPDLG _assocThis; // _prstate is DLG_PROCESS_STATE_INITIALIZING until Process // is called. Then, it turns DLG_PROCESS_STATE_ACTIVE. When Dismiss // is called, the state is set to DLG_PROCESS_STATE_DISMISSED, where // the state will stay until destruction. // DLG_PROCESS_STATE _prstate; // _usRetVal indicates the return value of the dialog. Its value // is defined only if _prstate == DLG_PROCESS_STATE_DISMISSED. // UINT _nRetVal; // Respond to a request for help. This works in two phases: // answer initial control request, and actually launch the help. // BOOL OnHelp(); VOID LaunchHelp(); // Validate each control in the dialog. // APIERR Validate(); // Layer over ASSOCHWNDPDLG: adds caching of most recent // static DIALOG_WINDOW * HwndToPwnd( HWND hwnd ); protected: DIALOG_WINDOW( const BYTE * pbTemplate, UINT cbTemplate, HWND hwndOwner, BOOL fAnsiDialog = DLG_CHAR_SET_DEFAULT ); // Client-defined callbacks. virtual BOOL OnCommand( const CONTROL_EVENT & event ); virtual BOOL OnOK(); virtual BOOL OnCancel(); virtual BOOL OnTimer( const TIMER_EVENT & event ); virtual BOOL OnScrollBar( const SCROLL_EVENT & ); virtual BOOL OnScrollBarThumb( const SCROLL_THUMB_EVENT & ); virtual BOOL OnDlgActivation( const ACTIVATION_EVENT & ); virtual BOOL OnDlgDeactivation( const ACTIVATION_EVENT & ); // JonN 8/3/95 This can be used to set the background color of // controls to other than the default, for example to // change the default background color for a static text control // to the same background as for an edit control. The virtual // redefinition may return an HBRUSH or may change *pmsgid; if it // returns NULL, be sure to call down to the original, otherwise // CONTROL_WINDOW::OnCtlColor will not be called. virtual HBRUSH OnCtlColor( HDC hdc, HWND hwnd, UINT * pmsgid ); // JonN 8/8/95 This can be used to respond to changes in the // system colors. virtual VOID OnSysColorChange(); virtual VOID OnControlError( CID cid, APIERR err ); virtual VOID OnValidationError( CID cid, APIERR err ); virtual const TCHAR * QueryHelpFile( ULONG nHelpContext ); virtual ULONG QueryHelpContext(); VOID Dismiss( UINT nRetVal = 0 ); VOID DismissMsg( MSGID msgid, UINT nRetVal = 0 ); virtual BOOL IsValid(); // Implementations supplied for HAS_MESSAGE_PUMP controls virtual BOOL FilterMessage( MSG * ); virtual BOOL IsPumpFinished(); // Another client-defined callback virtual BOOL MayRun(); public: DIALOG_WINDOW( const IDRESOURCE & idrsrcDialog, const PWND2HWND & wndOwner, BOOL fAnsiDialog = DLG_CHAR_SET_DEFAULT ); ~DIALOG_WINDOW(); // Replacement (virtual) from the OWNER_WINDOW class // virtual HWND QueryRobustHwnd() const; APIERR Process( UINT * pnRetVal = NULL ); // UINT variant APIERR Process( BOOL * pfRetVal ); // BOOL variant static INT_PTR DlgProc( HWND hdlg, UINT nMsg, WPARAM wParam, LPARAM lParam ); }; #endif // _BLTDLG_HXX_ - end of file