⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtmenu.h

📁 vc++编写的界面源代码,对C++爱好者是很发的帮助。
💻 H
字号:
///////////////////////////////////////////////////////////////////////////////
//
// MenuXP.h : header file
//
///////////////////////////////////////////////////////////////////////////////

#pragma once

#include <afxtempl.h>

///////////////////////////////////////////////////////////////////////////////
// Menu item image management class
class CImgDesc
{
public:
    HIMAGELIST m_hImgList;
    int        m_nIndex;

    CImgDesc (HIMAGELIST hImgList = NULL, int nIndex = 0)
        : m_hImgList (hImgList), m_nIndex (nIndex)
    {
    }
};

///////////////////////////////////////////////////////////////////////////////
class CRTMenu
{
// Operations
public:
    static void InitializeHook ();
    static void UninitializeHook ();

    static void SetXPLookNFeel (CWnd* pWnd, BOOL bXPLook = TRUE);
    static bool GetXPLookNFeel (const CWnd* pWnd);
    static void UpdateMenuBar (CWnd* pWnd);
    static void SetXPLookNFeel (CWnd* pWnd, HMENU hMenu, BOOL bXPLook = TRUE, BOOL bMenuBar = FALSE);
    static bool IsOwnerDrawn (HMENU hMenu);
    static void SetMRUMenuBarItem (RECT& rc);
    static void SetMenuItemImage (UINT nID, HIMAGELIST hImgList, int nIndex);
    static void OnMeasureItem (MEASUREITEMSTRUCT* pMeasureItemStruct);
    static bool OnDrawItem (DRAWITEMSTRUCT* pDrawItemStruct, HWND hWnd);
    static LRESULT OnMenuChar (HMENU hMenu, UINT nChar, UINT nFlags);
	static void SetMenuBarBitmap(CBitmap* MenuBarBitamp[],UINT DrawMode[]);
	static void SetMenuItemBitmap(CBitmap* MenuItemBitmap[],UINT DrawMode[]);
	static void EnableSkin(BOOL IsEnable = TRUE);

// Attributes
protected:
    static CMap <int, int, CString, CString&> ms_sCaptions;
    static CMap <HMENU, HMENU, CString, CString&> ms_sSubMenuCaptions;
    static CMap <int, int, CImgDesc, CImgDesc&> ms_Images;
    static CMap <HMENU, HMENU, CImgDesc, CImgDesc&> ms_SubMenuImages;

public:
	static CBitmap* m_MenuBarBitmap[5];
	static UINT     m_MenuBarBitmapDrawMode[5];
	static CBitmap* m_MenuItemBitmap[5];
	static UINT     m_MenuItemBitmapDrawMode[5];	
	static BOOL m_bEnableSkin;

friend class CRTMenuItem;
friend class CRTWndMenu;
};

///////////////////////////////////////////////////////////////////////////////
#define DECLARE_MENUXP()                                                             \
    protected:                                                                       \
	afx_msg void OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu);     \
	afx_msg void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct); \
	afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);          \
	afx_msg LRESULT OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu);

///////////////////////////////////////////////////////////////////////////////
#define ON_MENUXP_MESSAGES() \
	ON_WM_INITMENUPOPUP()    \
	ON_WM_MEASUREITEM()      \
	ON_WM_DRAWITEM()         \
	ON_WM_MENUCHAR()

///////////////////////////////////////////////////////////////////////////////
#define IMPLEMENT_MENUXP(theClass, baseClass)                                      \
    IMPLEMENT_MENUXP_(theClass, baseClass, CRTMenu::GetXPLookNFeel (this))

///////////////////////////////////////////////////////////////////////////////
#define IMPLEMENT_MENUXP_(theClass, baseClass, bFlag)                              \
    void theClass::OnInitMenuPopup (CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) \
    {                                                                              \
	    baseClass::OnInitMenuPopup (pPopupMenu, nIndex, bSysMenu);                 \
        CRTMenu::SetXPLookNFeel (this, pPopupMenu->m_hMenu,                        \
                                 bFlag/* && !bSysMenu*/);                          \
    }                                                                              \
    void theClass::OnMeasureItem (int, LPMEASUREITEMSTRUCT lpMeasureItemStruct)    \
    {                                                                              \
        CRTMenu::OnMeasureItem (lpMeasureItemStruct);                              \
    }                                                                              \
    void theClass::OnDrawItem (int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)      \
    {                                                                              \
        if ( !CRTMenu::OnDrawItem (lpDrawItemStruct, m_hWnd) )                     \
        {                                                                          \
            baseClass::OnDrawItem (nIDCtl, lpDrawItemStruct);                      \
        }                                                                          \
    }                                                                              \
    LRESULT theClass::OnMenuChar (UINT nChar, UINT nFlags, CMenu* pMenu)           \
    {                                                                              \
        if ( CRTMenu::IsOwnerDrawn (pMenu->m_hMenu) )                              \
        {                                                                          \
            return CRTMenu::OnMenuChar (pMenu->m_hMenu, nChar, nFlags);            \
        }                                                                          \
	    return baseClass::OnMenuChar (nChar, nFlags, pMenu);                       \
    }

///////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -