00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
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
00020
00021 enum RmIconMenuStateType
00022 {
00023 RmMenuStateCheck,
00024 RmMenuStateCheckBox,
00025 RmMenuStateRadioBox,
00026 RmMenuStatePopup,
00027
00028 };
00029
00030
00031
00032
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 }
00050
00051 ~CRmIconMenuItemData()
00052 {
00053 if( ( NULL != m_hIcon )
00054 && ( m_bDeleteIcon ) )
00055 {
00056 ::DestroyIcon( m_hIcon );
00057
00058 }
00059
00060 if( ( NULL != m_hBitmap )
00061 && ( m_bDeleteBitmap ) )
00062 {
00063 ::DeleteObject( m_hBitmap );
00064
00065 }
00066
00067 }
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 };
00081
00082
00083
00084
00085
00086
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 };
00158
00159 #endif // !defined( RMMFC_CRMICONMENU_DEFINE )