Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

RmMFCIconMenu.h

00001 //=================================================================================================//
00002 // filename: RmMFCIconMenu.h                                                                       //
00003 //                                                                                                 //
00004 //              ATI Research, Inc.                                                                 //
00005 //              3D Application Research Group                                                      //
00006 //                                                                                                 //
00007 // description: definition of CRmIconMenu control class                                            //
00008 //                                                                                                 //
00009 //=================================================================================================//
00010 //   (C) 2004 ATI Research, Inc.  All rights reserved.                                             //
00011 //=================================================================================================//
00012 
00013 #ifndef _RM_MFC_UTILITIES_ICON_MENU_H_
00014 #define _RM_MFC_UTILITIES_ICON_MENU_H_
00015 
00016 #include <MFCUtilities/RmMFCTypes.h>
00017 
00018 //-------------------------------------------------------------------------------------//
00019 // Menu Item Type Enumeration                                                          //
00020 //-------------------------------------------------------------------------------------//
00021 enum RmIconMenuStateType
00022 {
00023    RmMenuStateCheck,
00024    RmMenuStateCheckBox,
00025    RmMenuStateRadioBox,
00026    RmMenuStatePopup,
00027 
00028 }; // end enum RmIconMenuStateType
00029 
00030 //-------------------------------------------------------------------------------------//
00031 // Class:         CRmIconMenuItemData                                                  //
00032 // Description:   This class holds data for the custom menu items                      //
00033 //-------------------------------------------------------------------------------------//
00034 class RMMFCUTIL_API CRmIconMenuItemData
00035 {
00036 public:
00037    CRmIconMenuItemData()
00038    {
00039       m_strText         = _T("");
00040       m_hIcon           = NULL;
00041       m_bDeleteIcon     = false;
00042       m_hBitmap         = NULL;
00043       m_nBitmapWidth    = 0;
00044       m_nBitmapHeight   = 0;
00045       m_bDeleteBitmap   = true;
00046       m_nMenuStateType  = RmMenuStateCheck;
00047       m_uItemID         = 0;
00048       
00049    } // end CRmIconMenuItemData()
00050 
00051    ~CRmIconMenuItemData()
00052    {
00053       if(    ( NULL != m_hIcon )
00054           && ( m_bDeleteIcon ) )
00055       {
00056          ::DestroyIcon( m_hIcon );
00057 
00058       } // end if( delete m_hIcon )
00059       
00060       if(    ( NULL != m_hBitmap )
00061           && ( m_bDeleteBitmap ) )
00062       {
00063          ::DeleteObject( m_hBitmap );
00064 
00065       } // end if( delete m_hBitmap )
00066 
00067    } // end ~CRmIconMenuItemData()
00068 
00069 public:
00070    CString              m_strText;
00071    HICON                m_hIcon;
00072    bool                 m_bDeleteIcon;
00073    HBITMAP              m_hBitmap;
00074    int                  m_nBitmapWidth;
00075    int                  m_nBitmapHeight;
00076    bool                 m_bDeleteBitmap;
00077    RmIconMenuStateType  m_nMenuStateType;
00078    UINT                 m_uItemID;
00079 
00080 }; // end class CRmIconMenuItemData
00081 
00082 //-------------------------------------------------------------------------------------//
00083 // Class:         CRmIconMenu                                                          //
00084 // Description:   This class implements owner drawn menu items with icons, as          //
00085 //                well as modeless-like behavior for custom radio and check            //
00086 //                box menu item controls                                               //
00087 //-------------------------------------------------------------------------------------//
00088 class RMMFCUTIL_API CRmIconMenu : public CMenu
00089 {
00090 public:
00091         CRmIconMenu();
00092         virtual ~CRmIconMenu();
00093 
00094 public:
00095    BOOL TrackPopupMenu( UINT nFlags, int x, int y, CWnd *pWnd, LPRECT lpRect = 0 );
00096    void ClearMenu();
00097 
00098    void AppendPopupWithIconHandle(  const RM_TCHAR* pStr,
00099                                     UINT uCommandID,
00100                                     HICON hIcon,
00101                                     bool bDeleteIcon = false );
00102                                     
00103    void AppendMenuWithIconHandle(   const RM_TCHAR* pStr,
00104                                     UINT uCommandID,
00105                                     HICON hIcon,
00106                                     bool bDeleteIcon = false );
00107                                     
00108    void AppendMenuWithBitmapHandle( const RM_TCHAR* pStr,
00109                                     UINT uCommandID,
00110                                     HBITMAP hBitmap,
00111                                     int nBitmapWidth,
00112                                     int nBitmapHeight,
00113                                     bool bDeleteBitmap = true );
00114                                     
00115    void AppendMenuWithBitmapAndIconHandle(   const RM_TCHAR* pStr,
00116                                              UINT uCommandID,
00117                                              HICON hIcon,
00118                                              HBITMAP hBitmap,
00119                                              int nBitmapWidth,
00120                                              int nBitmapHeight,
00121                                              bool bDeleteIcon = true,
00122                                              bool bDeleteBitmap = true );
00123                                     
00124    void AppendMenuWithValue(  const RM_TCHAR* pStr,
00125                               UINT uCommandID,
00126                               RmIconMenuStateType menuStateType,
00127                               bool bCheck );
00128                               
00129    void AppendMenuItem(  const RM_TCHAR* pStr, UINT uCommandID );
00130    
00131    void AppendPopupMenu( const RM_TCHAR* pStr, UINT uCommandID );
00132 
00133    void EnableMenuItem( UINT uCommandID, bool bEnable );
00134    void SetMenuItemValue( UINT uCommandID, bool bCheck );
00135 
00136    virtual void MeasureItem( LPMEASUREITEMSTRUCT lpMeasureItemStruct );
00137    virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
00138 
00139 protected:
00140    HICON    LoadIcon(   HINSTANCE hInstance, DWORD dwIconResourceID );
00141    HBITMAP  LoadBitmap( HINSTANCE hInstance,
00142                         DWORD dwIconResourceID,
00143                         int nBitmapWidth,
00144                         int nBitmapHeight );
00145 
00146    static void ClearRadioBoxStates( HMENU hMenu, CPtrList *pMenuItemDataList );
00147 
00148    void SubClassMenu( HWND hWnd );
00149    
00150    static LRESULT HandleMessageProc( RmMessageHandlerStruct* pRmMessageHandlerStruct );
00151 
00152 
00153 protected:
00154    HWND     m_hParentWnd;
00155    CPtrList m_menuItemDataList;
00156 
00157 }; // end class RMMFCUTIL_API CRmIconMenu : public CMenu
00158 
00159 #endif // !defined( RMMFC_CRMICONMENU_DEFINE )

Generated on Fri Feb 25 16:08:38 2005 for RenderMonkey SDK by doxygen 1.3.6