|
|
/**********************************************************************/ /** 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_
|