windows-nt/Source/XPSP1/NT/admin/netui/common/h/bltsb.hxx
2020-09-26 16:20:57 +08:00

164 lines
6.1 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corp., 1991 **/
/**********************************************************************/
/*
bltsb.hxx
Header file for the BLT spin button
FILE HISTORY:
Terryk 16-Apr-1991 Created
terryk 20-Jun-1991 Code review changed. Attend: beng
terryk 05-Jul-1991 Second code review changed. Attend:
beng chuckc rustanl annmc terryk
terryk 12-Aug-1991 Add bitmap name parameter to the
constructor
*/
#ifndef _BLTSB_HXX_
#define _BLTSB_HXX_
#include "bltgroup.hxx"
#include "dlist.hxx"
#include "bltsi.hxx"
/**********************************************************************
NAME: SPIN_GROUP
SYNOPSIS: This is a custom control object which consisted of
two buttons. One is an up arrow and one is the down
arrow. It assoicated the 2 buttons with a list of
SPIN_ITEM objects. By using the 2 buttons, the user
can increases or decreases the value of the specified
SPIN_ITEM control.
INTERFACE:
SPIN_GROUP () - constructor
~SPIN_GROUP () - destructor
AddAssociation()- associated a SPIN_ITEM control with
the SPIN_GROUP
IsModified() - return the flag which indicated whether
the SPIN_GROUP have been modified or not.
SetModified() - Set when the spin button's field(s) is
modified by the user.
SetControlValueFocus() - highlight the current focus.
DoChar() - handle the incoming WM_CHAR message
JumpNextField() - jump to the next spin item field
JumpPrevField() - jump to the previous spin item field
DoNewFocus() - a spin item receive focus
DoArrowCommand() - the spin button receive arrow command
ChangeFieldValue() - change the current focus field value
SetFieldMinMax() - set the current focus field to either
min or max
PARENT: CONTROL_GROUP
USES: DLIST, ARROW_BUTTON, SPIN_ITEM
CAVEATS: There are 2 kinds of spin button in the BLT package.
1. SPIN_GROUP within a dialog box
The programmer should specified each individual
SPIN_ITEM control in the *.rc file. The resource file
should also included the definitation of the
SPIN_GROUP. The program will base on the location
of the SPIN_GROUP to create the Up and Down arrow.
Therefore, the programmer does not need to specify
the up and down arrow buttons in the resource file.
However, the programmer still need to pass the CID
of the 2 buttons to the SPIN_GROUP constructor.
2. SPIN_GROUP in an app window
In the constructor, the user should specified the
location and size of the spin button.
NOTES:
HISTORY:
terryk 22-May-1991 Created
beng 05-Oct-1991 Win32 conversion
beng 04-Aug-1992 Ids of bitmaps are fixed
**********************************************************************/
DECL_DLIST_OF( SPIN_ITEM, DLL_BASED ); // double link list of spin item
DLL_CLASS SPIN_GROUP : public CONTROL_GROUP
{
private:
BOOL _fModified; // modified flag
DLIST_OF(SPIN_ITEM) _dlsiControl; // double link list for
// SPIN_ITEM control.
PUSH_BUTTON _SpinButton; // spin buttons location
ARROW_BUTTON _arrowUp; // UP arrow button
ARROW_BUTTON _arrowDown; // DOWN arrow button
SPIN_ITEM * _psiCurrentField; // current SPIN_ITEM focused
SPIN_ITEM * _psiLastField; // last field in the link list
SPIN_ITEM * _psiFirstField; // first field in the list
BOOL _fActive; // indicate the active state
protected:
BOOL IsValidField();
VOID SetArrowButtonStatus();
virtual APIERR OnUserAction( CONTROL_WINDOW *, const CONTROL_EVENT & );
VOID SetCurrentField( SPIN_ITEM * psiControl = NULL );
inline SPIN_ITEM *QueryLastField( ) const
{ return _psiLastField; };
inline SPIN_ITEM *QueryFirstField( ) const
{ return _psiFirstField; };
inline SPIN_ITEM *QueryCurrentField( ) const
{ return _psiCurrentField; };
public:
// constructor and destructor
SPIN_GROUP( OWNER_WINDOW *powin, CID cid, CID cidUp, CID cidDown,
BOOL fActive = FALSE );
SPIN_GROUP( OWNER_WINDOW *powin, CID cid, CID cidUp, CID cidDown,
XYPOINT xy, XYDIMENSION dxy, ULONG flStyle,
BOOL fActive = FALSE );
~SPIN_GROUP();
// For Control Value class
virtual VOID SaveValue( BOOL fInvisible = TRUE );
virtual VOID RestoreValue( BOOL fInvisible = TRUE );
// Associated difference SPIN_ITEM control to this SPIN_GROUP
APIERR AddAssociation( SPIN_ITEM * psiControl );
// check whether the value in the spin button is changed or not.
BOOL IsModified() const;
VOID SetModified( BOOL fModified );
BOOL IsActive() const
{ return _fActive; }
VOID SetControlValueFocus( );
BOOL JumpNextField();
BOOL JumpPrevField();
BOOL DoNewFocus( SPIN_ITEM * pSpinItem );
BOOL DoArrowCommand( CID cidArrow, WORD wMsg );
BOOL ChangeFieldValue( WORD wMsg, INT nRepeatCount );
BOOL SetFieldMinMax( WORD wMsg );
BOOL DoChar( const CHAR_EVENT & );
XYPOINT QueryPos()
{ return _SpinButton.QueryPos(); }
XYDIMENSION QuerySize()
{ return _SpinButton.QuerySize(); }
};
#endif // _BLTSB_HXX_