310 lines
10 KiB
C++
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
|
||
|
|