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

310 lines
10 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corp., 1991 **/
/**********************************************************************/
/*
bltctrl.hxx
BLT control hierarchy declarations
(Enormous hierarchy comment deleted for the greater good of all mankind.)
FILE HISTORY
RustanL 20-Nov-1990 Created
beng 14-May-1991 Hacked for separate compilation
terryk 18-Jul-1991 Change the GRAPHICAL_BUTTON and GRAPHICAL_
BUTTON_WITH_DISABLE classes
terryk 26-Aug-1991 Add QuerySelected to GBWD
beng 17-Sep-1991 Broke apart bltbutn, bltedit
o-SimoP 02-Jan-1992 Added HIDDEN_CONTROL
beng 18-May-1992 Added SCROLLBAR
beng 30-May-1992 Changed GUILTT support
*/
#ifndef _BLT_HXX_
#error "Don't include this file directly; instead, include it through blt.hxx"
#endif // _BLT_HXX_
#ifndef _BLTCTRL_HXX_
#define _BLTCTRL_HXX_
#include "bltdlg.hxx"
#include "bltdc.hxx"
#include "bltfont.hxx"
#include "bltidres.hxx"
#include "string.hxx"
// N.b. This file depends on bltcons.h and bltwin.hxx.
/**********************************************************************
NAME: CONTROL_WINDOW
SYNOPSIS: Control window class
INTERFACE:
CONTROL_WINDOW() - constructor.
QueryCid() - return the CID private member.
ClaimFocus() - focus the current window
QueryFont() - return the current font handle
SetFont() - sets the current font, optionally redrawing
the control. Takes either a font handle or
a logical font object
SetControlValueFocus()
Redefines the CONTROL_VALUE::SetControlValueFocus to simply call
ClaimFocus.
Validate() - checks the control's contents for validity.
IndicateError() - indicates erroneous user input
PARENT: WINDOW, CONTROL_VALUE, FORWARDING_BASE
USES: CID, FONT
NOTES:
At its construction, each control checks its owning window
(to which it forwards all error reports and queries) to see
if it failed.
HISTORY:
rustanl 20-Nov-90 Creation
gregj 01-May-91 Added GUILTT custom-draw support
beng 14-May-1991 Changed friend
beng 21-May-1991 CD_* members made protected;
changed friends
beng 31-Jul-1991 Error reporting changed
beng 21-Aug-1991 Added SetFont member
Johnl 17-Sep-1991 Made NotifyGroups Public
beng 05-Oct-1991 Win32 conversion
beng 31-Oct-1991 Added dialog validation
beng 01-Jun-1992 Changed GUILTT support
jonn 05-Sep-1995 Added OnCtlColor
**********************************************************************/
DLL_CLASS CONTROL_WINDOW : public WINDOW,
public CONTROL_VALUE,
public FORWARDING_BASE
{
// This class already inherits from vanilla BASE, and so needs
// to override those methods.
//
NEWBASE(FORWARDING_BASE)
// DlgProc needs friendship in order to handle group notification
// upon control activity.
//
friend BOOL DIALOG_WINDOW::DlgProc( HWND hDlg, UINT nMsg,
WPARAM wParam, LPARAM lParam );
// OnCDMessages needs friendship in order to call CD_* members.
//
friend INT OWNER_WINDOW::OnCDMessages( UINT nMsg,
WPARAM wParam, LPARAM lParam );
private:
CID _cid;
protected:
// Virtual methods called on custom drawn (CD) objects
virtual BOOL CD_Draw( DRAWITEMSTRUCT * pdis );
// note, CD_Measure is currently only called for variable size items
virtual BOOL CD_Measure( MEASUREITEMSTRUCT * pmis );
// CD_Char and CD_VKey will only be called for listboxes
virtual INT CD_Char( WCHAR wch, USHORT nLastPos );
virtual INT CD_VKey( USHORT nVKey, USHORT nLastPos );
// Hook for CT's autotest tool
virtual APIERR CD_Guiltt( INT ilb, NLS_STR * pnlsOut );
virtual APIERR OnUserAction( const CONTROL_EVENT & e );
virtual VOID SetTabStop( BOOL fTabStop = TRUE );
// The names "static", "listbox", etc.
static const TCHAR * QueryStaticClassName () ;
static const TCHAR * QueryListboxClassName () ;
static const TCHAR * QueryComboboxClassName () ;
static const TCHAR * QueryEditClassName () ;
#define CW_CLASS_STATIC CONTROL_WINDOW::QueryStaticClassName()
#define CW_CLASS_LISTBOX CONTROL_WINDOW::QueryListboxClassName()
#define CW_CLASS_COMBOBOX CONTROL_WINDOW::QueryComboboxClassName()
#define CW_CLASS_EDIT CONTROL_WINDOW::QueryEditClassName()
public:
CONTROL_WINDOW( OWNER_WINDOW * powin, CID cid );
CONTROL_WINDOW( OWNER_WINDOW * powin, CID cid,
XYPOINT xy, XYDIMENSION dxy,
ULONG flStyle, const TCHAR * pszClassName );
CID QueryCid() const;
VOID ClaimFocus();
HFONT QueryFont() const;
VOID SetFont( HFONT hfont, BOOL fRedraw = FALSE );
VOID SetFont( const FONT & font, BOOL fRedraw = FALSE )
{ SetFont(font.QueryHandle(), fRedraw); }
virtual VOID SetControlValueFocus();
/* Tells all parent groups that this CONTROL_WINDOW received the message
* contained in lParam.
* (Should this have another version that doesn't need the event?)
*/
APIERR NotifyGroups( const CONTROL_EVENT & e );
// Data-validation functions
virtual APIERR Validate();
virtual VOID IndicateError( APIERR err );
// 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 non-NULL or it may change *pmsgid.
virtual HBRUSH OnCtlColor( HDC hdc, HWND hwnd, UINT * pmsgid );
};
/*************************************************************************
NAME: ICON_CONTROL
SYNOPSIS: Control for static icon control
INTERFACE: ICON_CONTROL()
powin - pointer to owner window
cid - ID of control
idresIcon - Either a pointer to the name of the icon
resource OR the ordinal of the icon resource.
SetIcon()
SetPredefinedIcon()
PARENT: CONTROL_WINDOW
HISTORY:
JohnL 8-Feb-1991 Created
beng 17-May-1991 Added app-window constructor
beng 04-Oct-1991 Win32 conversion
KeithMo 24-Mar-1992 Now takes IDRESOURCE, added SetPredefinedIcon.
beng 01-Aor-1992 const args fixup
**************************************************************************/
DLL_CLASS ICON_CONTROL : public CONTROL_WINDOW
{
private:
APIERR W_SetIcon( const IDRESOURCE & idresIcon, BOOL fIsPredefined );
public:
ICON_CONTROL( OWNER_WINDOW * powin, CID cid );
ICON_CONTROL( OWNER_WINDOW * powin, CID cid,
const IDRESOURCE & idresIcon );
ICON_CONTROL( OWNER_WINDOW * powin, CID cid,
XYPOINT xy, XYDIMENSION dxy,
ULONG flStyle = WS_CHILD,
const TCHAR * pszClassName = CW_CLASS_STATIC );
ICON_CONTROL( OWNER_WINDOW * powin, CID cid,
XYPOINT xy, XYDIMENSION dxy,
const IDRESOURCE & idresIcon,
ULONG flStyle = WS_CHILD,
const TCHAR * pszClassName = CW_CLASS_STATIC );
APIERR SetIcon( const IDRESOURCE & idresIcon )
{ return W_SetIcon( idresIcon, FALSE ); }
APIERR SetPredefinedIcon( const IDRESOURCE & idresIcon )
{ return W_SetIcon( idresIcon, TRUE ); }
};
/*************************************************************************
NAME: HIDDEN_CONTROL
SYNOPSIS: This disables control and makes it invisible
INTERFACE: HIDDEN_CONTROL() - constructor
~HIDDEN_CONTROL() - destructor
PARENT: CONTROL_WINDOW
HISTORY:
o-SimoP 02-Jan-1992 Created
**************************************************************************/
DLL_CLASS HIDDEN_CONTROL: public CONTROL_WINDOW
{
public:
HIDDEN_CONTROL( OWNER_WINDOW * powin, CID cid );
~HIDDEN_CONTROL()
{ ; }
};
/*************************************************************************
NAME: SCROLLBAR
SYNOPSIS: Simple wrapper for creating a scrollbar control
INTERFACE: SCROLLBAR() - ctor
SetPos() - set position within scrolling
SetRange() - set range of values
QueryPos() - query current position
QueryMin() - query current minimum
QueryMax() - query current maximum
PARENT: CONTROL_WINDOW
NOTES:
It would be interesting to make a version of this control
which adopts the embedded scrollbar of another control, e.g.
that of a MLE.
The SetXxx member functions do not redraw the control.
HISTORY:
beng 18-May-1992 Created
beng 29-Jun-1992 Outlined a ctor form
**************************************************************************/
DLL_CLASS SCROLLBAR: public CONTROL_WINDOW
{
private:
static const TCHAR * _pszClassName;
public:
SCROLLBAR( OWNER_WINDOW * pwnd, CID cid )
: CONTROL_WINDOW( pwnd, cid ) { ; }
SCROLLBAR( OWNER_WINDOW * pwnd, CID cid,
XYPOINT xy, XYDIMENSION dxy, ULONG flStyle );
VOID SetPos( UINT nPosition );
VOID SetRange( UINT nMinimum, UINT nMaximum );
UINT QueryPos() const;
UINT QueryMin() const;
UINT QueryMax() const;
};
#endif // _BLTCTRL_HXX_ - end of file