|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/
/*
bltmsgp.hxx BLT Message popup header file
Note: where the default button is named as "0", it means to use the same default that Windows uses.
FILE HISTORY: rustanl 5-Dec-1990 Created Johnl 15-Feb-1991 Added meat RustanL 4-Mar-1991 Replaced QueryHwnd with QueryRobustHwnd beng 14-May-1991 Hack for separate compilation beng 20-Aug-1991 Const owner-window parameter chuckc 23-Sep-1991 Added DisplayGenericError beng 30-Sep-1991 Changed an amazing number of SHORTs to INTs; added MSGID business beng 17-Jun-1992 Restructuring Yi-HsinS 10-Aug-1991 Added MPSEV_QUESTION JonN 25-Aug-1992 Merged in PERFORMER::DisplayError() */
#ifndef _BLT_HXX_
#error "Don't include this file directly; instead, include it through blt.hxx"
#endif // _BLT_HXX_
#ifndef _BLTMSGP_HXX_
#define _BLTMSGP_HXX_
// this allows the apps that assume STRLIST as
// a result of including this file to build. CODEWORK - cleanup!
#include "strlst.hxx"
// MsgPopup Buttons, and the shorthands of their common combinations
#define MP_UNKNOWN (0x0000)
#define MP_OK (0x0001)
#define MP_CANCEL (0x0002)
#define MP_YES (0x0004)
#define MP_NO (0x0008)
#define MP_OKCANCEL ( MP_OK | MP_CANCEL )
#define MP_YESNO ( MP_YES | MP_NO )
#define MP_YESNOCANCEL ( MP_YES | MP_NO | MP_CANCEL )
// Help context options.
// HC_NO_HELP means don't display a help button even if there is a help
// topic for this message
// HC_DEFAULT_HELP means display a help button if there is an associated
// help context for this message number
#define HC_NO_HELP (~0L)
#define HC_DEFAULT_HELP (0L)
// MsgPopup severity
enum MSG_SEVERITY { MPSEV_ERROR, MPSEV_WARNING, MPSEV_INFO, MPSEV_QUESTION };
// Message Map table for use by applications
typedef struct _MSGMAPENTRY { MSGID msgidIn; MSGID msgidOut; } MSGMAPENTRY ;
/*************************************************************************
NAME: POPUP
SYNOPSIS: Encapsulates messageboxes
INTERFACE: POPUP() - ctor ~POPUP() - dtor Show() - displays the popup
Init() - initialize module Term() - clean up before shutdown
SetCaption() - Set the caption of MsgPopup ResetCaption() - Reset the caption of MsgPopup back to Windows NT
SetHelpContextBase() - Set the help context base for help contexts automatically searched in the msg2help.tbl.
PARENT: BASE
USES: NLS_STR
CAVEATS: Uses BASE only as a Boolean fError indicator.
NOTES: Clients should access this class through MsgPopup() only.
HISTORY: beng 17-Jun-1992 Created in restructuring beng 29-Jun-1992 Outlined Set and ResetCaption Yi-HsinS 09-Oct-1992 Added _ulHelpContextBase, SetHelpContextBase()
**************************************************************************/
DLL_CLASS POPUP: public BASE { private: HWND _hwndParent; MSGID _msgid; MSG_SEVERITY _msgsev; ULONG _ulHelpContext; UINT _nButtons; UINT _nDefButton; NLS_STR * _pnlsText;
static BOOL _fInit;
static NLS_STR * _vpnlsEmergencyText; static NLS_STR * _vpnlsEmergencyCapt;
static MSGMAPENTRY * _vpmmeTable;
static MSGID _vmsgidCaption; static ULONG _ulHelpContextBase;
NLS_STR * LoadMessage( MSGID msgid, BOOL fTrySystem = FALSE ); INT Emergency() const;
static INT CalcDefButton( UINT nButtons, UINT nDefButton ); static INT MapButton( UINT nButton );
public: POPUP( HWND hwndOwner, MSGID msgid, MSG_SEVERITY msgsev, UINT nButtons, UINT nDefButton, BOOL fTrySystem = FALSE );
POPUP( HWND hwndOwner, MSGID msgid, MSG_SEVERITY msgsev, ULONG ulHelpTopic, UINT nButtons, const NLS_STR ** apnlsInsert, UINT nDefButton );
#if 0 // elide unused form
POPUP( HWND hwndOwner, MSGID msgid, MSG_SEVERITY msgsev, ULONG ulHelpTopic, UINT nButtons, STRLIST & strlstInsert, UINT nDefButton ); #endif
~POPUP();
INT Show();
static APIERR Init(); static VOID Term();
static VOID SetCaption( MSGID msgid ); static VOID ResetCaption();
static VOID SetMsgMapTable( MSGMAPENTRY * pmmeTable ); static MSGID MapMessage( MSGID msgidIn );
static ULONG SetHelpContextBase( ULONG ulHelpContextBase = 0 ); };
/*************************************************************************
NAME: OWNINGWND
SYNOPSIS: Hack to convert a pwnd to a robust hwnd for MsgPopup.
HISTORY: beng 02-Jun-1992 Created (from PWND2HWND of bltdlg)
**************************************************************************/
DLL_CLASS OWNINGWND { private: HWND _hwnd;
public: OWNINGWND( HWND hwnd ) : _hwnd(hwnd) { } OWNINGWND( const OWNER_WINDOW * pwnd ) : _hwnd(pwnd->QueryRobustHwnd()) { }
HWND QueryHwnd() const { return _hwnd; } };
/*
* Call this function during application initialization to properly * initialize the message popup stuff (only affects msgpopup during * low memory/resource failure situations). * * These are called automatically when BLTRegister is called (an app. * shouldn't call these directly). * * UnInitMsgPopup should be called during application shutdown. It frees * resources allocated by InitMsgPopup. */
inline APIERR InitMsgPopup() { return POPUP::Init(); }
inline VOID UnInitMsgPopup() { POPUP::Term(); }
//
// The MsgPopup function declarations
//
// The following form takes the help context from the resource
// file, and uses an OK button.
extern DLL_BASED INT MsgPopup( const OWNINGWND & wnd, MSGID msgid, MSG_SEVERITY msgsev = MPSEV_ERROR );
// The following form allows the client to specify a set of buttons,
// as well as an optional default button. The help context is taken from
// the resource file.
extern DLL_BASED INT MsgPopup( const OWNINGWND & wnd, MSGID msgid, MSG_SEVERITY msgsev, UINT nButtons, UINT nDefButton = MP_UNKNOWN );
// The following form allows the client to specify insert strings, as
// well as a choice of buttons. Help context is taken from the resource
// file. The insert strings come in three flavors, a single parameter,
// two parameters and > two parameters. This is for ease of use since
// 95% of the message strings take one or two parameters.
extern DLL_BASED INT MsgPopup( const OWNINGWND & wnd, MSGID msgid, MSG_SEVERITY msgsev, UINT nButtons, const TCHAR * pszIns, UINT nDefButton = MP_UNKNOWN );
extern DLL_BASED INT MsgPopup( const OWNINGWND & wnd, MSGID msgid, MSG_SEVERITY msgsev, UINT nButtons, const TCHAR * pszIns1, const TCHAR * pszIns2, UINT nDefButton = MP_UNKNOWN );
/*
One further refinement: This form allows the user to specify both a MSGID and an APIERR. The string for this APIERR will be inserted into the MSGID string as %1, while the apnlsInserted strings will be shifted to %2 and higher. If the APIERR string cannot be found, a string containing the error number and class will be inserted instead. */ extern DLL_BASED INT MsgPopup( const OWNINGWND & wnd, MSGID msgid, APIERR errAPI, MSG_SEVERITY msgsev, ULONG ulHelpTopic, UINT nButtons, NLS_STR * apnlsParams[], UINT nDefButton = MP_UNKNOWN );
#if 0 // strlist form never used
INT MsgPopup( const OWNINGWND & wnd, MSGID msgid, MSG_SEVERITY msgsev, UINT nButtons, STRLIST & strlst, UINT nDefButton = MP_UNKNOWN ); #endif
// Finally, these forms allow the client to have it all. They take
// as parameters insert strings (note, that an insert string object may
// contain 0 insert strings, if desired), a help topic, and a choice of
// buttons.
#if 0 // strlist form never used
INT MsgPopup( const OWNINGWND & wnd, MSGID msgid, MSG_SEVERITY msgsev, ULONG ulHelpTopic, UINT nButtons, STRLIST & strlst, UINT nDefButton = MP_UNKNOWN ); #endif
extern DLL_BASED INT MsgPopup( const OWNINGWND & wnd, MSGID msgid, MSG_SEVERITY msgsev, ULONG ulHelpTopic, UINT nButtons, NLS_STR * apnlsInserted[], UINT nDefButton = MP_UNKNOWN );
/*
This function is used to display a generic error message of form:
Some error on object %objectname%. Error %apierr% occurred: %text_for_api_err%
idMessage should refer to a resource string of the form above, eg:
The world collapsed while stopping server %1. Error %2 occurred: %3%.
pszObjectName will be substituted in %1, errAPI in %2, and the corresponding API text in %3. If we cannot find the text for the API err, we just leave the text out. errAPI is expected to be in the SYS/NET range. */
extern DLL_BASED UINT DisplayGenericError( const OWNINGWND & wnd, MSGID msgid, APIERR errAPI, const TCHAR * pszObject1, const TCHAR * pszObject2, MSG_SEVERITY msgsev = MPSEV_ERROR );
extern DLL_BASED UINT DisplayGenericError( const OWNINGWND & wnd, MSGID msgid, APIERR errAPI, const TCHAR * pszObjectName, MSG_SEVERITY msgsev = MPSEV_ERROR );
#endif // _BLTMSGP_HXX_ - end of file
|