/**********************************************************************/ /** Microsoft Windows NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/ /* bltdlgxp.hxx Expandable dialog class declaration. This class represents a standard BLT DIALOG_WINDOW which can be expanded once to reveal new controls. All other operations are common between EXPANDABLE_DIALOG and DIALOG_WINDOW. To construct, provide the control ID of two controls: a "boundary" static text control (SLT) and an "expand" button. The "boundary" control is declared in the resource file as 2x2 units in size, containing no text, and has only the WS_CHILD style. Its location marks the lower right corner of the reduced (initial) size of the dialog. Controls lower and/or to the right of this boundary "point" are disabled until the dialog is expanded. The "expand" button is a normal two-state button which usually has a title like "Options >>" to indicate that it changes the dialog. EXPANDABLE_DIALOG handles the state transition entirely, and the "expand" button is permanently disabled after the transition. In other words, it's a one way street. The virtual method OnExpand() is called when expansion takes place; this can be overridden to initialize controls which have been heretofor invisible. It's usually necessary to override the default version of OnExpand() to set focus on whichever control you want, since the control which had focus (the expand button) is now disabled. There is one optional parameter to the constructor. It specifies a distance, in dialog units. If the ShowArea() member finds that the "boundary" control is within this distance of the real (.RC file) border of the dialog, it will use the original border. This prevents small (3-10 unit) errors caused by the inability to place a control immediately against the dialog border. FILE HISTORY: DavidHov 11/1/91 Created */ #ifndef _BLTDLGXP_HXX_ #define _BLTDLGXP_HXX_ /************************************************************************* NAME: EXPANDABLE_DIALOG SYNOPSIS: A dialog whose initial state is small, and then expands to reveal more controls. Two controls are special: a "boundary" control which demarcates the limits of the smaller initial state, and an "expand" button which causes the dialog to grow to its full size; the button is then permanently disabled. About the "cPxBoundary" parameter: if the distance from the end of the boundary control to the edge of the dialog is LESS than this value, the size of the original dialog will be used for that dimension. INTERFACE: EXPANDABLE_DIALOG() -- constructor ~EXPANDABLE_DIALOG() -- destructor Process() -- run the dialog OnExpand() -- optional virtual routine called when the dialog is expanded. Default routine just sets focus on OK button. PARENT: DIALOG_WINDOW USES: PUSH_BUTTON, SLT CAVEATS: The expansion process is one-way; that is, the dialog cannot be shrunk. The controlling button is permanently disabled after the expansion. NOTES: HISTORY: DavidHov 10/30/91 Created **************************************************************************/ DLL_CLASS EXPANDABLE_DIALOG ; #define EXP_MIN_USE_BOUNDARY 20 DLL_CLASS EXPANDABLE_DIALOG : public DIALOG_WINDOW { public: EXPANDABLE_DIALOG ( const TCHAR * pszResourceName, HWND hwndOwner, CID cidBoundary, CID cidExpandButn, INT cPxBoundary = EXP_MIN_USE_BOUNDARY ) ; ~ EXPANDABLE_DIALOG () ; // Overloaded 'Process' members for reducing initial dialog extent APIERR Process ( UINT * pnRetVal = NULL ) ; APIERR Process ( BOOL * pfRetVal ) ; protected: PUSH_BUTTON _butnExpand ; // The button which bloats SLT _sltBoundary ; // The "point" marker BOOL OnCommand ( const CONTROL_EVENT & event ) ; // Virtual called when dialog is to be expanded. virtual VOID OnExpand () ; VOID ShowArea ( BOOL fFull ) ; // Change dialog size private: XYDIMENSION _xyOriginal ; // Original dlg box dimensions INT _cPxBoundary ; // Limit to force original boundary BOOL _fExpanded ; // Dialog is expanded }; #endif // _BLTDLGXP_HXX_