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

CMenuXP - Office XP风格菜单

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.94/5 (108投票s)

2002年2月8日

CPOL

2分钟阅读

viewsIcon

1387361

downloadIcon

27919

所有者绘制菜单,具有Office XP视觉风格。

Sample Image - MenuXP.gif

对话框窗口中的菜单:示例图片 (对话框窗口中的菜单)- MenuXP_dlg.gif

引言

本文档介绍了一种具有 Office XP 和 Visual Studio .NET 视觉风格的自定义绘制菜单的实现。

使用代码

要在您的项目中使用的 CMenuXP 类,您需要在代码中添加 3 个宏

  1. 在处理菜单的类的头文件中(可能为 MainFrame
    #include "Tools/MenuXP.h"    // Before the declaration of the class
    // ...
    
    DECLARE_MENUXP()             // Into the definition of the class
  2. 在同一类的源文件中
    IMPLEMENT_MENUXP(className, baseClass);
  3. 在类的消息映射中
    BEGIN_MESSAGE_MAP(className, baseClass)
        // ...
        ON_MENUXP_MESSAGES()   // <-- Added line
    END_MESSAGE_MAP()

为了使边框平坦,我子类化了系统管理的弹出菜单窗口。为了实现这一点,您需要在代码中添加以下 2 个调用

  1. 在您的 CWinApp 派生类的 InitInstance 方法中
    CMenuXP::InitializeHook();
    
  2. 在您的 CWinApp 派生类的 ExitInstance 方法中
    CMenuXP::UninitializeHook();

要使菜单栏平坦,您必须进行此调用

CMenuXP::UpdateMenuBar (pFrameWnd); // pFrameWnd refers to the frame that 
                                    // contains the MenuBar

此调用的最佳位置取决于框架类型

  • 对于 MDI 应用程序,在子窗口的 OnUpdateFrameMenu 方法中。
  • 对于 SDI 应用程序,在主框架的 LoadFrame 方法中。

最后,不要忘记最后的调用

CMenuXP::SetXPLookNFeel (pFrameWnd); // refers to the frame that contains 
                                     // the MenuBar

如果没有此调用,菜单将以标准模式显示。

    为了绘制菜单项,我重用了我之前文章中已经介绍的一些类:Office XP 风格 & 感觉

    历史

    • 2002/08/02 - 首次发布。
    • 2003/06/01 - 添加了平坦边框和平坦菜单栏。
    • 2003/05/31 - Kris Wojtas 更新了源代码,以允许 MenuXP 绘制“单选”和“复选”状态以及位图下的渐变。
    • 2003/06/02 - 更正、单选项目支持(感谢 Kris Wojtas)和新的演示(平坦控件和基于对话框的示例)。您可以在 www.azsoft.free.fr 获取本文的最新更新。
    • 2003年7月14日 - Kris 的进一步更新

      Sample Image

    © . All rights reserved.