Visual C++ 7.1Visual Studio .NET 2003Windows 2003Windows 2000Windows XPMFC中级开发Visual StudioWindowsC++
CMenuEx - 所有者绘制菜单





3.00/5 (9投票s)
2004年8月28日
1分钟阅读

70646

3848
一个易于使用的自绘制菜单,继承自 CMenu。
引言
本文介绍了一个从 CMenu
派生的类,用于实现具有运行时可定制功能的自绘制菜单。
背景
该类的目的是提供一种简单的方法来实现具有 Office XP 或 Visual Studio .NET 风格的自定义菜单。
绘制菜单时使用的所有颜色都可以在运行时更改,并且还提供了各种其他设置来定制菜单样式。
使用代码
要使用 CMenuEx
,您需要执行以下步骤:
- 将 MenuEx.h 和 MenuEx.cpp 包含在您的项目中。
- 编辑处理菜单的类的头文件(通常为 MainFrm.h)。
#include "MenuEx/MenuEx.h" // ... DECLARE_MENUEX() // ... public: CMenuEx* m_pMainMenu;
- 编辑处理菜单的类的源代码(通常为 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(); } // ...
- 如果您希望菜单使用现有工具栏的图像,请添加以下代码:
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(添加了对图像和复选标记的支持)。