351 lines
9.1 KiB
C++
351 lines
9.1 KiB
C++
/**********************************************************************/
|
|
/** Microsoft Windows NT **/
|
|
/** Copyright(c) Microsoft Corp., 1992 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
bltmenu.hxx
|
|
This file contains the class declarations for the MENU_BASE,
|
|
POPUP_MENU, and SYSTEM_MENU classes.
|
|
|
|
These classes are used to manipulate menus. The classes are
|
|
structured as follows:
|
|
|
|
MENU_BASE
|
|
/ \
|
|
/ \
|
|
POPUP_MENU SYSTEM_MENU
|
|
|
|
A POPUP_MENU represents any popup menu. These menus may or may
|
|
not actually be attached to a window.
|
|
|
|
A SYSTEM_MENU represents the system menu of a particular window.
|
|
|
|
|
|
FILE HISTORY:
|
|
KeithMo 12-Oct-1992 Created.
|
|
|
|
*/
|
|
|
|
|
|
#ifndef _BLT_HXX_
|
|
#error "Don't include this file directly; instead, include it through blt.hxx"
|
|
#endif // _BLT_HXX_
|
|
|
|
#ifndef _BLTMENU_HXX_
|
|
#define _BLTMENU_HXX_
|
|
|
|
|
|
#include "base.hxx"
|
|
#include "bltidres.hxx" // for IDRESOURCE
|
|
#include "bltpwnd.hxx" // for PWND2HWND
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: MENU_BASE
|
|
|
|
SYNOPSIS: This is abstract class is used as a base for POPUP_MENU
|
|
and SYSTEM_MENU.
|
|
|
|
INTERFACE: MENU_BASE - Class constructor (protected).
|
|
|
|
~MENU_BASE - Class destructor.
|
|
|
|
QueryHandle - Get the HMENU for this menu.
|
|
|
|
QueryItemCount - Returns the number of items in
|
|
this menu.
|
|
|
|
QueryItemState - Returns the state flags for
|
|
a particular item.
|
|
|
|
QueryItemText - Returns the display name of a
|
|
particular item.
|
|
|
|
QuerySubMenu - Returns the HMENU of a submenu.
|
|
|
|
Append - Append a new item to the menu.
|
|
|
|
AppendSeparator - Append a separator to the menu.
|
|
|
|
Delete - Delete an existing menu item.
|
|
|
|
Insert - Insert a new item into the menu.
|
|
|
|
InsertSeparator - Insert a separator into the menu.
|
|
|
|
Modify - Modify the settings of an
|
|
existing menu item.
|
|
|
|
Remove - Removes an existing menu item.
|
|
|
|
CheckItem - Checks/unchecks an existing item.
|
|
|
|
EnableItem - Enables/disables an existing item.
|
|
|
|
IsPopup - Is a given item a popup?
|
|
|
|
IsSeparator - Is a given item a separator?
|
|
|
|
PARENT: BASE
|
|
|
|
HISTORY:
|
|
KeithMo 12-Oct-1992 Created.
|
|
|
|
**************************************************************************/
|
|
DLL_CLASS MENU_BASE : public BASE
|
|
{
|
|
private:
|
|
|
|
//
|
|
// The menu handle.
|
|
//
|
|
|
|
HMENU _hMenu;
|
|
|
|
protected:
|
|
|
|
//
|
|
// Since this is an abstract class, the
|
|
// constructor is protected.
|
|
//
|
|
|
|
MENU_BASE( HMENU hMenu = NULL );
|
|
|
|
//
|
|
// Set the menu handle for this object.
|
|
//
|
|
|
|
VOID SetHandle( HMENU hMenu )
|
|
{ _hMenu = hMenu; }
|
|
|
|
//
|
|
// These workers perform the "guts" of the
|
|
// mutable manipulators.
|
|
//
|
|
|
|
APIERR W_Append( const VOID * pItemData,
|
|
UINT_PTR ItemIdOrHmenu,
|
|
UINT nFlags ) const;
|
|
|
|
APIERR W_Insert( const VOID * pItemData,
|
|
UINT nPosition,
|
|
UINT_PTR ItemIdOrHmenu,
|
|
UINT nFlags ) const;
|
|
|
|
APIERR W_Modify( const VOID * pItemData,
|
|
UINT idItem,
|
|
UINT_PTR ItemIdOrHmenu,
|
|
UINT nFlags ) const;
|
|
|
|
//
|
|
// Worker for QueryItemText variants.
|
|
//
|
|
|
|
INT W_QueryItemText( TCHAR * pszBuffer,
|
|
UINT cchBuffer,
|
|
UINT nItem,
|
|
UINT nFlags ) const;
|
|
|
|
public:
|
|
|
|
//
|
|
// Class destructor.
|
|
//
|
|
|
|
~MENU_BASE( VOID );
|
|
|
|
//
|
|
// Accessors.
|
|
//
|
|
|
|
HMENU QueryHandle( VOID ) const
|
|
{ return _hMenu; }
|
|
|
|
operator HMENU() const
|
|
{ return _hMenu; }
|
|
|
|
INT QueryItemCount( VOID ) const;
|
|
|
|
UINT QueryItemID( INT nPosition ) const;
|
|
|
|
UINT QueryItemState( UINT nItem,
|
|
UINT nFlags = MF_BYCOMMAND ) const;
|
|
|
|
APIERR QueryItemText( TCHAR * pszBuffer,
|
|
UINT cchBuffer,
|
|
UINT nItem,
|
|
UINT nFlags = MF_BYCOMMAND ) const;
|
|
|
|
APIERR QueryItemText( NLS_STR * pnls,
|
|
UINT nItem,
|
|
UINT nFlags = MF_BYCOMMAND ) const;
|
|
|
|
HMENU QuerySubMenu( INT nPosition ) const;
|
|
|
|
//
|
|
// Manipulators.
|
|
//
|
|
|
|
APIERR Append( const TCHAR * pszName,
|
|
UINT idNewItem,
|
|
UINT nFlags = MF_BYCOMMAND ) const;
|
|
|
|
APIERR Append( const TCHAR * pszName,
|
|
HMENU hMenu,
|
|
UINT nFlags = MF_BYCOMMAND | MF_POPUP ) const;
|
|
|
|
APIERR AppendSeparator( VOID ) const;
|
|
|
|
APIERR Delete( UINT idItem,
|
|
UINT nFlags = MF_BYCOMMAND ) const;
|
|
|
|
APIERR Insert( const TCHAR * pszName,
|
|
UINT nPosition,
|
|
UINT idNewItem,
|
|
UINT nFlags = MF_BYCOMMAND ) const;
|
|
|
|
APIERR Insert( const TCHAR * pszName,
|
|
UINT nPosition,
|
|
HMENU hMenu,
|
|
UINT nFlags = MF_BYCOMMAND | MF_POPUP ) const;
|
|
|
|
APIERR InsertSeparator( UINT nPosition,
|
|
UINT nFlags = MF_BYCOMMAND ) const;
|
|
|
|
APIERR Modify( const TCHAR * pszName,
|
|
UINT idItem,
|
|
UINT idNewItem,
|
|
UINT nFlags = MF_BYCOMMAND ) const;
|
|
|
|
APIERR Modify( const TCHAR * pszName,
|
|
UINT idItem,
|
|
HMENU hMenu,
|
|
UINT nFlags = MF_BYCOMMAND | MF_POPUP ) const;
|
|
|
|
APIERR Remove( UINT idItem,
|
|
UINT nFlags = MF_BYCOMMAND ) const;
|
|
|
|
UINT CheckItem( UINT idItem,
|
|
BOOL fCheck = TRUE,
|
|
UINT nFlags = MF_BYCOMMAND ) const;
|
|
|
|
UINT EnableItem( UINT idItem,
|
|
BOOL fEnable = TRUE,
|
|
UINT nFlags = MF_BYCOMMAND ) const;
|
|
|
|
//
|
|
// Test functions.
|
|
//
|
|
|
|
BOOL IsPopup( INT nPosition ) const;
|
|
|
|
BOOL IsSeparator( INT nPosition ) const;
|
|
|
|
}; // class MENU_BASE
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: POPUP_MENU
|
|
|
|
SYNOPSIS: This class represents a popup menu that may or may not
|
|
be attached to an actual window.
|
|
|
|
INTERFACE: POPUP_MENU - Class constructor.
|
|
|
|
~POPUP_MENU - Class destructor.
|
|
|
|
Destory - Destroys the menu.
|
|
|
|
Attach - Attach the menu to a given
|
|
window.
|
|
|
|
Track - Tracks a "floating" popup menu.
|
|
|
|
PARENT: MENU_BASE
|
|
|
|
HISTORY:
|
|
KeithMo 12-Oct-1992 Created.
|
|
|
|
**************************************************************************/
|
|
DLL_CLASS POPUP_MENU : public MENU_BASE
|
|
{
|
|
private:
|
|
|
|
//
|
|
// Constructor helper.
|
|
//
|
|
|
|
APIERR CtAux( HMENU hMenu );
|
|
|
|
protected:
|
|
|
|
public:
|
|
|
|
//
|
|
// Class constructors & destructor.
|
|
//
|
|
|
|
POPUP_MENU( VOID );
|
|
POPUP_MENU( IDRESOURCE & id );
|
|
POPUP_MENU( HMENU hMenu );
|
|
POPUP_MENU( const PWND2HWND & wnd );
|
|
~POPUP_MENU( VOID );
|
|
|
|
//
|
|
// Manipulators.
|
|
//
|
|
|
|
APIERR Destroy( VOID );
|
|
|
|
APIERR Attach( const PWND2HWND & wnd );
|
|
|
|
APIERR Track( const PWND2HWND & wnd,
|
|
UINT nFlags,
|
|
INT x,
|
|
INT y,
|
|
const RECT * pRect = NULL ) const;
|
|
|
|
}; // class POPUP_MENU
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: SYSTEM_MENU
|
|
|
|
SYNOPSIS: This class represents the system menu of a particular
|
|
window.
|
|
|
|
INTERFACE: SYSTEM_MENU - Class constructor.
|
|
|
|
~SYSTEM_MENU - Class destructor.
|
|
|
|
PARENT: MENU_BASE
|
|
|
|
HISTORY:
|
|
KeithMo 12-Oct-1992 Created.
|
|
|
|
**************************************************************************/
|
|
DLL_CLASS SYSTEM_MENU : public MENU_BASE
|
|
{
|
|
private:
|
|
|
|
protected:
|
|
|
|
public:
|
|
|
|
//
|
|
// Class constructor & destructor.
|
|
//
|
|
|
|
SYSTEM_MENU( const PWND2HWND & wnd );
|
|
~SYSTEM_MENU( VOID );
|
|
|
|
}; // class SYSTEM_MENU
|
|
|
|
|
|
#endif // _BLTMENU_HXX_
|
|
|