// // cuimenu.h // #ifndef CUIMENU_H #define CUIMENU_H #include "cuiwnd.h" #define CUI_MENU_UNSELECTED (UINT)(-1) class CUIFMenu; #define UIMENUITEM_NONSELECTEDITEM 0x0001 #define UIMENUITEM_MULTICOLUMNITEM 0x0002 //----------------------------------------------------------------------------- // // CUIFMenuItem // //----------------------------------------------------------------------------- class CUIFMenuItem : public CUIFObject { public: CUIFMenuItem(CUIFMenu *pMenu, DWORD dwFlags = 0); virtual ~CUIFMenuItem(void); BOOL Init(UINT uId, WCHAR *psz); void SetBitmap(HBITMAP hbmp); void SetBitmapMask( HBITMAP hBmp ); void Check(BOOL bChecked); void RadioCheck(BOOL bChecked); void Gray(BOOL bGrayed); BOOL IsGrayed() {return _bGrayed;} virtual void InitMenuExtent(); void SetSub(CUIFMenu *pMenu); CUIFMenu *GetSub() {return _pSubMenu;} CUIFMenu *GetMenu() {return _pMenu;} void ShowSubPopup(); virtual void OnLButtonUp(POINT pt); virtual void OnMouseIn(POINT pt); virtual void OnMouseOut(POINT pt); virtual void OnPaint(HDC hdc); virtual void OnPaintDef(HDC hdc); virtual void OnPaintO10(HDC hdc); virtual void OnTimer(); virtual BOOL IsSeparator() {return FALSE;} BOOL IsNonSelectedItem() {return _bNonSelectedItem;} UINT GetId() {return _uId;} UINT GetVKey() {return _uShortcutkey;} BOOL IsCheck() {return (_bChecked || _bRadioChecked) ? TRUE : FALSE;} BOOL IsBmp() {return (_hbmp) ? TRUE : FALSE;} BOOL IsStr() {return (_psz) ? TRUE : FALSE;} BOOL GetMenuExtent(SIZE *psize) { *psize = _size; return TRUE; } int GetTabTextLength() {return _sizeTab.cx;} protected: void DrawUnderline(HDC hDC, int x, int y, HBRUSH hbr); void DrawCheck(HDC hDC, int x, int y); void DrawArrow(HDC hDC, int x, int y); void DrawBitmapProc( HDC hDC, int x, int y); UINT _uId; WCHAR *_psz; UINT _cch; WCHAR *_pszTab; UINT _cchTab; UINT _uShortcutkey; UINT _uUnderLine; HBITMAP _hbmp; HBITMAP _hbmpMask; BOOL _bChecked; BOOL _bRadioChecked; BOOL _bGrayed; BOOL _bNonSelectedItem; CUIFMenu *_pMenu; CUIFMenu *_pSubMenu; SIZE _size; SIZE _sizeTab; }; //----------------------------------------------------------------------------- // // CUIFMenuItemSeparator // //----------------------------------------------------------------------------- class CUIFMenuItemSeparator : public CUIFMenuItem { public: CUIFMenuItemSeparator(CUIFMenu *pMenu) : CUIFMenuItem(pMenu, UIMENUITEM_NONSELECTEDITEM) { _uId = (UINT)-1; } virtual ~CUIFMenuItemSeparator(void) {} virtual void InitMenuExtent(); virtual void OnPaint(HDC hDC); virtual void OnPaintDef(HDC hdc); virtual void OnPaintO10(HDC hdc); virtual BOOL IsSeparator() {return TRUE;} }; //----------------------------------------------------------------------------- // // CUIFMenu // //----------------------------------------------------------------------------- #define UIMENU_MULTICOLUMN 0x00000001 class CUIFMenu : public CUIFWindow { public: CUIFMenu(HINSTANCE hInst, DWORD dwWndStyle, DWORD dwMenuStyle); virtual ~CUIFMenu(void); BOOL InsertItem(CUIFMenuItem *pItem); BOOL InsertSeparator(); UINT ShowModalPopup(CUIFWindow *pcuiWndParent, const RECT *prc, BOOL fVertical); void ModalMouseNotify( UINT uMsg, POINT pt); void ShowSubPopup(CUIFMenu *pcuiParentMenu, const RECT *prc, BOOL fVertical); void HandleMouseMsg( UINT uMsg, POINT pt ); HFONT GetMarlettFont() {return _hfontMarlett;} void CancelMenu(); void PostKey(BOOL fUp, WPARAM wParam, LPARAM lParam); void SetSelectedId(UINT uId); void OnKeyDown(HWND hwnd, WPARAM wParam, LPARAM lParam); void OnKeyUp(HWND hwnd, WPARAM wParam, LPARAM lParam); void CancelSubMenu() { if (_pCurrentSubMenu) _pCurrentSubMenu->CancelMenu(); } CUIFMenu *GetCurrentSubMenu() { return _pCurrentSubMenu; } void SetSelectedItem(CUIFMenuItem *pItem) { if (_pSelectedItem == pItem) return; CUIFMenuItem *pOldItem = _pSelectedItem; _pSelectedItem = pItem; if (pOldItem) pOldItem->CallOnPaint(); if (_pSelectedItem) _pSelectedItem->CallOnPaint(); } BOOL IsSelectedItem(CUIFMenuItem *pItem) { return (_pSelectedItem == pItem) ? TRUE : FALSE; } BOOL IsBmpCheckItem() {return _fIsBmpCheckItem;} BOOL IsO10Menu() {return FHasStyle( UIWINDOW_OFC10MENU ) ? TRUE : FALSE;} int GetMenuCheckWidth() {return _cxMenuCheck;} int GetMaxTabTextLength() {return _cxMaxTab;} protected: virtual void ModalMessageLoop( void ); virtual BOOL InitShow(CUIFWindow *pcuiWndParent, const RECT *prc, BOOL fVertical, BOOL fAnimate); virtual BOOL UninitShow(); CUIFMenu *GetTopSubMenu(); CUIFMenuItem *GetNextItem(CUIFMenuItem *pItem); CUIFMenuItem *GetPrevItem(CUIFMenuItem *pItem); void SetMenuFont(); void ClearMenuFont(); CUIFMenu *_pcuiParentMenu; CUIFMenu *_pCurrentSubMenu; CUIFMenuItem *_pSelectedItem; UINT _uIdSelect; CUIFObjectArray _rgItems; HFONT _hfontMarlett; BOOL _fInModal; BOOL _fIsBmpCheckItem; DWORD _dwMenuStyle; int _cxMenuCheck; int _cxMaxTab; }; #endif // CUIMENU_H