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