65.9K
CodeProject 正在变化。 阅读更多。
Home

CMenuEx - 所有者绘制菜单

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (9投票s)

2004年8月28日

1分钟阅读

viewsIcon

70646

downloadIcon

3848

一个易于使用的自绘制菜单,继承自 CMenu。

Sample Image - CMenuEx.JPG

引言

本文介绍了一个从 CMenu 派生的类,用于实现具有运行时可定制功能的自绘制菜单。

背景

该类的目的是提供一种简单的方法来实现具有 Office XP 或 Visual Studio .NET 风格的自定义菜单。

绘制菜单时使用的所有颜色都可以在运行时更改,并且还提供了各种其他设置来定制菜单样式。

使用代码

要使用 CMenuEx,您需要执行以下步骤:

  1. MenuEx.hMenuEx.cpp 包含在您的项目中。
  2. 编辑处理菜单的类的头文件(通常为 MainFrm.h)。
    #include "MenuEx/MenuEx.h"
    // ...
    DECLARE_MENUEX()
    // ...
    public:
        CMenuEx*    m_pMainMenu;
  3. 编辑处理菜单的类的源代码(通常为 MainFrm.cpp)。
    IMPLEMENT_MENUEX(CMainFrame, CFrameWnd)
    // ...
    BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
        // ...
        ON_MENUEX_MESSAGES()    /* CMenuEx */
    END_MESSAGE_MAP()
    // ...
    CMainFrame::CMainFrame()
    {
        // ...
        m_pMainMenu = NULL;
    }
    // ...
    CMainFrame::~CMainFrame()
    {
        // ...
        delete m_pMainMenu;
    }
    // ...
    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
        // ...
        m_pMainMenu = new CMenuEx(this);
        if(m_pMainMenu->LoadMenu(IDR_MAINFRAME))
        {
            /*
                Custom color & size settings
                for startup should go here
            */
            ::DestroyMenu(m_hMenuDefault);
            SetMenu(m_pMainMenu);
            m_hMenuDefault = m_pMainMenu->GetSafeHmenu();
        }
        // ...
  4. 如果您希望菜单使用现有工具栏的图像,请添加以下代码:
        if(m_pMainMenu->LoadMenu(IDR_MAINFRAME))
        {
            /*
                Custom color & size settings
                for startup should go here
            */
            m_pMainMenu->UseToolBarImages(&m_wndToolBar);    // Added line 
            ::DestroyMenu(m_hMenuDefault);
            SetMenu(m_pMainMenu);
            m_hMenuDefault = m_pMainMenu->GetSafeHmenu();
        }

    此示例代码使用 CMenuEx 的默认设置和默认应用程序工具栏的图像,替换了 SDI/MDI 项目的标准主菜单。

备注

菜单图标和图像尚未支持。 另外,不建议在运行时更改项目大小设置。 但是,更改颜色效果很好。

历史

  • 2004/08/28 - 版本 1.0。
  • 2004/08/30 - 版本 1.1(添加了对图像和复选标记的支持)。
© . All rights reserved.