Visual Studio .NET 2002Visual Studio 6Visual C++ 7.0Windows 2000Visual C++ 6.0Windows XPMFC中级开发Visual StudioWindowsC++
CMenuXP - Office XP风格菜单






4.94/5 (108投票s)
所有者绘制菜单,
- 下载源代码 - 112 Kb (包含 VC6 和 VC7 项目文件)
- 下载可执行文件 - 118 Kb
- 下载由 Kris Wojtas 更新的源代码 - 18 Kb
对话框窗口中的菜单:
引言
本文档介绍了一种具有 Office XP 和 Visual Studio .NET 视觉风格的自定义绘制菜单的实现。
使用代码
要在您的项目中使用的 CMenuXP
类,您需要在代码中添加 3 个宏
- 在处理菜单的类的头文件中(可能为
MainFrame
)#include "Tools/MenuXP.h" // Before the declaration of the class // ... DECLARE_MENUXP() // Into the definition of the class
- 在同一类的源文件中
IMPLEMENT_MENUXP(className, baseClass);
- 在类的消息映射中
BEGIN_MESSAGE_MAP(className, baseClass) // ... ON_MENUXP_MESSAGES() // <-- Added line END_MESSAGE_MAP()
为了使边框平坦,我子类化了系统管理的弹出菜单窗口。为了实现这一点,您需要在代码中添加以下 2 个调用
- 在您的 CWinApp 派生类的
InitInstance
方法中CMenuXP::InitializeHook();
- 在您的 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 的进一步更新