// XTPSkinObjectMenu.h: interface for the CXTPSkinObjectMenu class. // // This file is a part of the XTREME SKINFRAMEWORK MFC class library. // (c)1998-2012 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// //{{AFX_CODEJOCK_PRIVATE #if !defined(__XTPSKINOBJECTMENU_H__) #define __XTPSKINOBJECTMENU_H__ //}}AFX_CODEJOCK_PRIVATE #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CXTPSkinPopupMenu; class CXTPSkinManagerSchema; class CXTPSkinPopupMenuState; class CXTPSkinPopupMenuItem { public: CXTPSkinPopupMenuItem(CXTPSkinPopupMenu* pMenu, int nItem); public: HMENU GetPopupMenu() const; DWORD GetState() const; CRect GetScreenPos() const; BOOL IsSeparator() const; BOOL IsOwnerDraw() const; UINT GetID() const; BOOL IsEnabled() const; BOOL IsChecked() const; UINT GetType() const; BOOL IsDefault() const; CString GetText() const; DWORD_PTR GetItemData() const; void GetMenuItemInfo(UINT fMask, LPMENUITEMINFO lpMII) const; HBITMAP GetItemBitmap() const; BOOL IsMDISysButton() const; public: CRect m_rcItem; int m_nItem; HMENU m_hMenu; CXTPSkinPopupMenu* m_pPopupMenu; }; class CXTPSkinPopupMenu : public CWnd { public: CXTPSkinPopupMenu(); ~CXTPSkinPopupMenu(); public: CString GetMenuString(int nIndex); int GetCount(); CXTPSkinPopupMenuItem* GetItem(int nIndex) const; void RebuildItems(); void RemoveAll(); CSize RecalcLayout(); void PositionSysMenu(); BOOL Create(HWND hwndParent); BOOL IsMenuThemed(); BOOL IsSysMenuBar() const { return m_bMenuBar && m_bSysMenu; } void OnFinalRelease(); protected: DECLARE_MESSAGE_MAP(); afx_msg void OnPaint(); public: HMENU m_hMenu; CArray m_arrItems; int m_nSelected; int m_nDropped; BOOL m_bMenuBar; BOOL m_bSysMenu; BOOL m_bToggle; BOOL m_bDropNextPopup; BOOL m_bAboutToHide; BOOL m_bSendUninit; BOOL m_bDroppedLeft; HWND m_hWndNotify; int m_nGripperWidth; CXTPSkinPopupMenuState* m_pState; UINT_PTR m_nHideTimer; UINT_PTR m_nShowTimer; CXTPSkinPopupMenu* m_pNextPopup; CXTPSkinPopupMenu* m_pPrevPopup; }; class CXTPSkinPopupMenuState { public: enum MenuFocus { focusMouse, focusKeyboard }; public: CXTPSkinPopupMenuState(HWND hWndNotify); public: BOOL HandleMenuMessage(LPMSG lpMsg); BOOL StartMenu(MenuFocus nFocus); void InitMenu(CXTPSkinPopupMenu* pPopupMenu); void RunLoop(LPARAM lParam); int ItemHitTest(CPoint point, CXTPSkinPopupMenu* pPopupMenu); CXTPSkinPopupMenu* FindMenu(CPoint point, CXTPSkinPopupMenu* pPopupMenu, int* pnItem); void EndState(); BOOL TrackPopupMenu(HMENU hMenu, UINT dwFlags, int x, int y, HWND hWnd, CONST RECT *prcRect); public: void OnButtonDown(CXTPSkinPopupMenu* pMenu, int nItem, BOOL bClick); void OnButtonDblClick(CXTPSkinPopupMenu* pPopupMenu, int nItem); void OnButtonUp(CXTPSkinPopupMenu* pMenu, int nItem); void OnMouseMove(CPoint point); void OnKeyDown(CXTPSkinPopupMenu* pMenu, WPARAM nKey); void OnChar(CXTPSkinPopupMenu* pPopupMenu, WPARAM nKey); int FindChar(CXTPSkinPopupMenu* pPopupMenu, WPARAM nKey, int nStart); CXTPSkinPopupMenuItem* SelectItem(CXTPSkinPopupMenu* pPopupMenu, int nItem); void SendMenuSelect(CXTPSkinPopupMenu* pPopupMenu); HWND OpenHierarchy(CXTPSkinPopupMenu* pPopupMenu); void CloseHierarchy(CXTPSkinPopupMenu* pPopupMenu); BOOL HideNextHierarchy(CXTPSkinPopupMenu* pPopupMenu); BOOL SetTimerToCloseHierarchy(CXTPSkinPopupMenu* pPopupMenu); BOOL SetTimerToOpenHierarchy(CXTPSkinPopupMenu* pPopupMenu); void RedrawPopup(CXTPSkinPopupMenu* pPopupMenu); CXTPSkinPopupMenu* GetNextPopup(CXTPSkinPopupMenu* pPopupMenu) const; CXTPSkinPopupMenu* GetActivePopup() const; BOOL ContinueLoop() const; void Dismiss(); void Notify(UINT nMessage, UINT nCommand, LPARAM lParam); void DismissNotify(CXTPSkinPopupMenu* pPopupMenu, int nItem); void DismissNotify(HMENU hMenu, int nItem); void EndMenuLoop(); CXTPSkinPopupMenu* FindPopup(HWND hWnd) const; BOOL RemoveMessage(UINT nMessage); int FindNextItem(CXTPSkinPopupMenu* pPopupMenu, int nItem, BOOL bForward, UINT nFlags) const; void FilterMenuKey(LPARAM lParam); BOOL SwitchToAlternateMenu(); void AdjustMonitorRect(CXTPSkinPopupMenu* pPopupMenu, CPoint& pt, CSize sz, UINT dwFlags, LPCRECT prcExclude); CPoint PositionHierarchy(CXTPSkinPopupMenu* pSubMenu, CXTPSkinPopupMenu* pPopupMenu, CRect rcItem, CSize size); static void AFX_CDECL WindowToScreen(HWND hWnd, CRect& rcItem); void PlayEventSound(UINT nID); int GetMenuFlags(HMENU hMenu); public: public: MenuFocus m_nFocus; BOOL m_bButtonDown; BOOL m_bInsideMenuLoop; BOOL m_bDismiss; HWND m_hWndCapture; CXTPSkinPopupMenu* m_pRootPopup; CXTPSkinPopupMenu* m_pAlternatePopup; BOOL m_bNofyByPos; BOOL m_bNoNotify; CPoint m_ptMouseLast; BOOL m_bMenuStarted; BOOL m_bRightButton; int m_nLastCommand; BOOL m_bSynchronous; BOOL m_bFirstClick; DWORD m_dwMenuShowDelay; CXTPSkinManagerSchema* m_pSchema; }; class _XTP_EXT_CLASS CXTPSkinObjectApplicationFrame : public CXTPSkinObjectFrame { DECLARE_DYNCREATE(CXTPSkinObjectApplicationFrame) public: public: CXTPSkinObjectApplicationFrame(); virtual ~CXTPSkinObjectApplicationFrame(); protected: void DrawFrame(CDC* pDC); BOOL FrameHasMenuBar(); void DrawFrameMenuBar(CDC* pDC); void RedrawMenuBar(); void UpdateMenuBar(); protected: int HitTestMenuItem(CPoint point); void RebuildMenuItems(); CXTPSkinPopupMenuState* StartMenuState(UINT nID, LPARAM lParam); public: static BOOL AFX_CDECL TrackPopupMenu(HMENU hMenu, UINT uFlags, int x, int y, HWND hWnd, CONST RECT *prcRect); protected: DECLARE_MESSAGE_MAP(); afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp); afx_msg LRESULT HandleNcHitTest(CPoint point); afx_msg BOOL HandleMouseMove(CPoint point); afx_msg void OnContextMenu(CWnd* pWnd, CPoint pos); BOOL HandleSysCommand(UINT nID, LPARAM lParam); protected: CRect m_rcMenuBar; CXTPSkinPopupMenu* m_pPopupMenu; }; #endif // !defined(__XTPSKINOBJECTMENU_H__)