CMenuEX - 位图菜单类






2.40/5 (8投票s)
2001年1月5日

153373

1605
实现所有者绘制菜单
引言
MS Visual Studio 和 MS Office 产品具有带有位图的菜单,这些位图与工具栏按钮关联。 此类的目标是提供一种快速简便的方法来实现这些类型的菜单。 菜单类可用于替换主框架窗口菜单,也可以用作上下文菜单。
实现
文件
- ToolBarWrapper.h & ToolBarWrapper.cpp (工具栏资源包装器)
- MenuEx.h & MenuEx.cpp (主
Menu
类)
将上述文件添加到您的项目中。
接下来,将视图头文件添加到项目的头文件中,即菜单将要使用的位置,例如 Mainfrm.h。
#include "MenuEx.h"
CMenuEx
是要包含以实现菜单的类。
class CMainFrame : public CFrameWnd
{
... Some other code
CMenuEx m_menu;
};
要为框架窗口初始化菜单,请在 OnCreate
过程中调用 CMenuEx::Initialize
。
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// MENUEX_ADD - Mainframe menu is initialized with parent window
if (!m_menu.Initialize(IDR_MAINFRAME,this))
return -1;
... Some other code
现在我们需要提供对菜单大小和绘制的支持,这需要处理 WM_MEASUREITEM
和 WM_DRAWITEM
消息。 使用向导创建消息处理程序(**注意**:您需要在向导中将消息筛选器选项更改为 窗口)。
在 MFC 中使用 Radio 功能的菜单项需要在项目中使用此添加,其中 SetRadio
选项用于更新命令用户界面。
// Example message handle for radio buttons
void CMainFrame::OnUpdateRadioItem3(CCmdUI* pCmdUI)
{
pCmdUI->SetRadio(m_nRadioGroup == 3);
m_menu.SetRadio(pCmdUI,m_nRadioGroup == 3); // Set radio button here
}
完成了! 下一个版本将支持智能菜单和全新的 MS Visual Studio 7.0beta 菜单。
许可证
本文没有明确的许可证附加到它,但可能包含在文章文本或下载文件本身中的使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。