/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/ /* bltbutn.hxx BLT button control class definitions FILE HISTORY: beng 17-Sep-1991 Separated from bltctrl.hxx KeithMo 23-Oct-1991 Added forward references. */ #ifndef _BLT_HXX_ #error "Don't include this file directly; instead, include it through blt.hxx" #endif // _BLT_HXX_ #ifndef _BLTBUTN_HXX_ #define _BLTBUTN_HXX_ #include "bltctrl.hxx" #include "bltbitmp.hxx" // // Forward references. // DLL_CLASS BUTTON_CONTROL; DLL_CLASS PUSH_BUTTON; DLL_CLASS GRAPHICAL_BUTTON; DLL_CLASS GRAPHICAL_BUTTON_WITH_DISABLE; DLL_CLASS STATE_BUTTON_CONTROL; DLL_CLASS STATE2_BUTTON_CONTROL; DLL_CLASS STATE3_BUTTON_CONTROL; DLL_CLASS RADIO_BUTTON; DLL_CLASS RADIO_GROUP; DLL_CLASS CHECKBOX; DLL_CLASS TRISTATE; /********************************************************************* NAME: BUTTON_CONTROL SYNOPSIS: Base class for all button-type controls INTERFACE: BUTTON_CONTROL() - constructor PARENT: CONTROL_WINDOW NOTES: This class provides the Windows winclass name for all children of the class. HISTORY: rustanl 20-Nov-90 Creation beng 17-May-1991 Added app-window constructor beng 17-Sep-1991 Rephrased classname argument; made ctor protected KeithMo 27-Oct-1992 Moved QueryEventEffects here from STATE_BUTTON_CONTROL. **********************************************************************/ DLL_CLASS BUTTON_CONTROL : public CONTROL_WINDOW { protected: BUTTON_CONTROL( OWNER_WINDOW * powin, CID cid ); BUTTON_CONTROL( OWNER_WINDOW * powin, CID cid, XYPOINT xy, XYDIMENSION dxy, ULONG flStyle ); virtual UINT QueryEventEffects( const CONTROL_EVENT & e ); }; /********************************************************************* NAME: PUSH_BUTTON SYNOPSIS: push button control class INTERFACE: PUSH_BUTTON() - constructor MakeDefault() - send a DM_SETDEFID to the system PARENT: BUTTON_CONTROL CAVEATS: NOTES: HISTORY: rustanl 20-Nov-90 Creation beng 17-May-1991 Added app-window constructor beng 17-Sep-1991 Elided unnecessary classname arg **********************************************************************/ DLL_CLASS PUSH_BUTTON : public BUTTON_CONTROL { public: PUSH_BUTTON( OWNER_WINDOW * powin, CID cid ); PUSH_BUTTON( OWNER_WINDOW * powin, CID cid, XYPOINT xy, XYDIMENSION dxy, ULONG flStyle ); VOID MakeDefault(); }; /********************************************************************* NAME: GRAPHICAL_BUTTON (gb) SYNOPSIS: Graphical push button control class INTERFACE: GRAPHICAL_BUTTON(powin, cid, hbmMain, hbmStatus) - constructor QueryMain() - return bitmap of picture QueryStatus() - return status light bitmap SetStatus() - set status light bitmap PARENT: PUSH_BUTTON CAVEATS: Once a graphical button is constructed, the bitmap belongs to the button and will be deleted when the button is destroyed. The status light bitmap, however, is NOT destroyed, since the same bitmaps will probably be used by several buttons simultaneously. NOTES: For best results, the status light bitmap (if any) should be a 10x10 color bitmap. HISTORY: gregj 04-Apr-91 Created gregj 01-May-91 Added GUILTT support beng 17-May-1991 Added app-window constructor terryk 20-Jun-1991 Change HBITMAP to BIT_MAP terryk 21-Jun-1991 Added more constructors terryk 17-Jul-1991 Added another SetStatus with take hbitmap as a parameter beng 17-Sep-1991 Elided unnecessary classname arg beng 30-Mar-1992 Completely elide GUILTT support beng 01-Jun-1992 Change to CD_Draw as part of GUILTT change beng 04-Apr-1992 Pruned HBITMAP versions KeithMo 13-Dec-1992 Moved ctor guts to CtAux(), uses DISPLAY_MAP. **********************************************************************/ DLL_CLASS GRAPHICAL_BUTTON : public PUSH_BUTTON { private: DISPLAY_MAP * _pdmMain; DISPLAY_MAP * _pdmStatus; DISPLAY_MAP * _pdmMainDisabled; VOID CtAux( const TCHAR * pszMainName, const TCHAR * pszMainDisabledName, const TCHAR * pszStatusName ); protected: virtual BOOL CD_Draw(DRAWITEMSTRUCT *pdis); public: GRAPHICAL_BUTTON( OWNER_WINDOW * powin, CID cid, const TCHAR * pszMainName, const TCHAR * pszMainDisabledName = NULL, const TCHAR * pszStatusName = NULL ); GRAPHICAL_BUTTON( OWNER_WINDOW * powin, CID cid, const TCHAR * pszMainName, const TCHAR * pszMainDisabledName, XYPOINT xy, XYDIMENSION dxy, ULONG flStyle, const TCHAR * pszStatusName = NULL ); ~GRAPHICAL_BUTTON(); HBITMAP QueryMain() const { return (_pdmMain != NULL) ? _pdmMain->QueryBitmapHandle() : NULL; } HBITMAP QueryMainDisabled() const { return (_pdmMainDisabled != NULL) ? _pdmMainDisabled->QueryBitmapHandle() : NULL; } HBITMAP QueryStatus() const { return (_pdmStatus != NULL) ? _pdmStatus->QueryBitmapHandle() : NULL; } VOID SetStatus( BMID bmidNewStatus ); VOID SetStatus( HBITMAP hbitmap ); }; /********************************************************************** NAME: GRAPHICAL_BUTTON_WITH_DISABLE SYNOPSIS: This graphical button is similar to GRAPHICAL_BUTTON. The differences are: 1. It will expand the main bitmap and try to cover the whole button. 2. It allow the user specified a disable bitmap. It will display the bitmap when the button is disable. INTERFACE: GRAPHICAL_BUTTON_WITH_DISABLE() - constructor QuerybmpDisable() - get the HBITMAP of the disable bitmap QueryMain() - Query the handle of the Main bitmap QueryMainInvert() - Query the handle of the inverted bitmap QueryDisable() - Query the handle of the disable bitmap SetSelected( ) - set the current status of the bitmap QuerySelected() - query the current status of the bitmap PARENT: PUSH_BUTTON USES: BIT_MAP HISTORY: terryk 22-May-91 Created terryk 20-Jun-91 Change HBITMAP to BIT_MAP terryk 21-Jun-91 Added more constructor terryk 18-JUl-91 Check the parent class the PUSH_BUTTON beng 17-Sep-1991 Elided unnecessary classname arg beng 01-Jun-1992 Change to CD_Draw as part of GUILTT change beng 04-Aug-1992 Loads bitmaps by ordinal; prune HBITMAP ver ***********************************************************************/ DLL_CLASS GRAPHICAL_BUTTON_WITH_DISABLE : public PUSH_BUTTON { private: BIT_MAP _bmMain; // Main bitmap BIT_MAP _bmMainInvert; // invert bitmap BIT_MAP _bmDisable; // disable bitmap BOOL _fSelected; // selected flag protected: virtual BOOL CD_Draw( DRAWITEMSTRUCT * pdis ); public: GRAPHICAL_BUTTON_WITH_DISABLE( OWNER_WINDOW *powin, CID cid, BMID nIdMain, BMID nIdInvert, BMID nIdDisable ); GRAPHICAL_BUTTON_WITH_DISABLE( OWNER_WINDOW *powin, CID cid, BMID nIdMain, BMID nIdInvert, BMID nIdDisable, XYPOINT xy, XYDIMENSION dxy, ULONG flStyle ); ~GRAPHICAL_BUTTON_WITH_DISABLE(); HBITMAP QueryMain() const { return (!_bmMain) ? NULL : _bmMain.QueryHandle(); } HBITMAP QueryMainInvert() const { return (!_bmMainInvert) ? NULL : _bmMainInvert.QueryHandle(); } HBITMAP QueryDisable() const { return (!_bmDisable) ? NULL : _bmDisable.QueryHandle(); } // set the selected condition VOID SetSelected( BOOL fSelected ) { _fSelected = fSelected; } BOOL QuerySelected() const { return _fSelected; } }; /********************************************************************* NAME: STATE_BUTTON_CONTROL SYNOPSIS: State button control base class INTERFACE: STATE_BUTTON_CONTROL() - constructor. SetState() - set the state QueryState() - query the state PARENT: BUTTON_CONTROL CAVEATS: You probably don't want to call this class directly. See CHECKBOX, RADIO_BUTTON, and TRISTATE for more appetizing alternatives. NOTES: This is a base class, HISTORY: rustanl 20-Nov-90 Creation Johnl 25-Apr-91 Made SetCheck protected (Set buttons through RADIO_GROUP or the public CHECKBOX::SetCheck). beng 17-May-1991 Added app-window constructor beng 31-Jul-1991 Renamed QMessageInfo to QEventEffects beng 17-Sep-1991 Elided unnecessary classname arg beng 18-Sep-1991 Made "state" n-way; moved BOOL-ness to a separate subclass beng 04-Oct-1991 Win32 conversion KeithMo 27-Oct-1992 Moved QueryEventEffects to BUTTON_CONTROL. *********************************************************************/ DLL_CLASS STATE_BUTTON_CONTROL : public BUTTON_CONTROL { private: // Used to save value when control is Inactive. // UINT _nSaveCheck; protected: STATE_BUTTON_CONTROL( OWNER_WINDOW * powin, CID cid ); STATE_BUTTON_CONTROL( OWNER_WINDOW * powin, CID cid, XYPOINT xy, XYDIMENSION dxy, ULONG flStyle ); VOID SetState( UINT nValue ); UINT QueryState() const; /* Redefine CONTROL_VALUE defaults. */ virtual VOID SaveValue( BOOL fInvisible = TRUE ); virtual VOID RestoreValue( BOOL fInvisible = TRUE ); }; /************************************************************************* NAME: STATE2_BUTTON_CONTROL SYNOPSIS: Base class for state buttons with binary state. INTERFACE: SetCheck() - sets and resets the button QueryCheck()- returns the "checked" state of the button PARENT: STATE_BUTTON_CONTROL CAVEATS: Do not instantiate this class directly. See CHECKBOX or RADIO_BUTTON for uses. NOTES: This is a base class. HISTORY: beng 18-Sep-1991 Created, when adding tristates. **************************************************************************/ DLL_CLASS STATE2_BUTTON_CONTROL : public STATE_BUTTON_CONTROL { protected: STATE2_BUTTON_CONTROL( OWNER_WINDOW * powin, CID cid ) : STATE_BUTTON_CONTROL(powin, cid) { } STATE2_BUTTON_CONTROL( OWNER_WINDOW * powin, CID cid, XYPOINT xy, XYDIMENSION dxy, ULONG flStyle ) : STATE_BUTTON_CONTROL( powin, cid, xy, dxy, flStyle ) { } public: VOID SetCheck( BOOL fValue = TRUE ) { STATE_BUTTON_CONTROL::SetState( (UINT)!!fValue ); } BOOL QueryCheck() const { return (STATE_BUTTON_CONTROL::QueryState() != 0); } }; /********************************************************************* NAME: RADIO_BUTTON SYNOPSIS: Radio button control. INTERFACE: RADIO_BUTTON() - constructor PARENT: STATE2_BUTTON_CONTROL CAVEATS: See RADIO_GROUP. NOTES: The RADIO_BUTTON class is primarily meant to be used by the RADIO_GROUP class. It hides its SetCheck member, then makes it visible to the group only. HISTORY: rustanl 20-Nov-90 Creation Johnl 23-Apr-91 Removed OnUserAction (shell dialog proc will call the group OnUserAction auto- matically). beng 17-May-1991 Added app-window constructor beng 17-Sep-1991 Elided unnecessary classname arg beng 18-Sep-1991 Adjust hierarchy for tristates *********************************************************************/ DLL_CLASS RADIO_BUTTON : public STATE2_BUTTON_CONTROL { friend class RADIO_GROUP; // Grant access to SetCheck method. private: // Hide from clients (who should set radio // buttons through their group). VOID SetCheck(BOOL fValue) { STATE2_BUTTON_CONTROL::SetCheck(fValue); } public: RADIO_BUTTON( OWNER_WINDOW * powin, CID cid ) : STATE2_BUTTON_CONTROL(powin, cid) { } RADIO_BUTTON( OWNER_WINDOW * powin, CID cid, XYPOINT xy, XYDIMENSION dxy, ULONG flStyle ) : STATE2_BUTTON_CONTROL( powin, cid, xy, dxy, flStyle ) { } }; /********************************************************************* NAME: CHECKBOX SYNOPSIS: Check box control. INTERFACE: CHECKBOX() - constructor Toggle() - toggle the check status PARENT: STATE2_BUTTON_CONTROL HISTORY: rustanl 20-Nov-90 Creation beng 17-May-1991 Added app-window constructor beng 17-Sep-1991 Elided unnecessary classname arg beng 18-Sep-1991 Adjust hierarchy for tristates *********************************************************************/ DLL_CLASS CHECKBOX : public STATE2_BUTTON_CONTROL { public: CHECKBOX( OWNER_WINDOW * powin, CID cid ) : STATE2_BUTTON_CONTROL(powin, cid) { } CHECKBOX( OWNER_WINDOW * powin, CID cid, XYPOINT xy, XYDIMENSION dxy, ULONG flStyle ) : STATE2_BUTTON_CONTROL( powin, cid, xy, dxy, flStyle ) { } BOOL Toggle(); }; /************************************************************************* NAME: STATE3_BUTTON_CONTROL SYNOPSIS: Base class for state buttons with 3-way state. INTERFACE: SetCheck() - sets and resets the button SetIndeterminate() - puts the button into "indeterminate" state. IsIndeterminate() - returns whether button has any setting. IsChecked() - returns whether button has a check. PARENT: STATE_BUTTON_CONTROL CAVEATS: Do not instantiate this class directly; instead, use TRISTATE. NOTES: This is a base class. HISTORY: beng 18-Sep-1991 Created, when adding tristates. beng 19-Sep-1991 Renamed SetGrey to SetIndeterminate **************************************************************************/ DLL_CLASS STATE3_BUTTON_CONTROL : public STATE_BUTTON_CONTROL { protected: STATE3_BUTTON_CONTROL( OWNER_WINDOW * powin, CID cid ) : STATE_BUTTON_CONTROL(powin, cid) { } STATE3_BUTTON_CONTROL( OWNER_WINDOW * powin, CID cid, XYPOINT xy, XYDIMENSION dxy, ULONG flStyle ) : STATE_BUTTON_CONTROL( powin, cid, xy, dxy, flStyle ) { } public: VOID SetCheck( BOOL fValue ) { STATE_BUTTON_CONTROL::SetState( (UINT) !!fValue ); } VOID SetIndeterminate() { STATE_BUTTON_CONTROL::SetState( 2 ); } BOOL IsIndeterminate() const { return (STATE_BUTTON_CONTROL::QueryState() == 2); } BOOL IsChecked() const { return (STATE_BUTTON_CONTROL::QueryState() == 1); } }; /************************************************************************* NAME: TRISTATE SYNOPSIS: 3-way checkbox control. INTERFACE: EnableThirdState() - allows client to suppress 3-state operation PARENT: STATE3_BUTTON_CONTROL HISTORY: beng 18-Sep-1991 Created beng 19-Sep-1991 Added EnableThirdState member **************************************************************************/ DLL_CLASS TRISTATE: public STATE3_BUTTON_CONTROL { public: TRISTATE( OWNER_WINDOW * powin, CID cid ) : STATE3_BUTTON_CONTROL(powin, cid) { } TRISTATE( OWNER_WINDOW * powin, CID cid, XYPOINT xy, XYDIMENSION dxy, ULONG flStyle ) : STATE3_BUTTON_CONTROL( powin, cid, xy, dxy, flStyle ) { } VOID EnableThirdState(BOOL fEnable); }; #endif // _BLTBUTN_HXX_ - end of file