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

CMenuEX - 位图菜单类

2001年1月5日

viewsIcon

153373

downloadIcon

1605

实现所有者绘制菜单

Sample Image - MenuEx1.gif

引言

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_MEASUREITEMWM_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 菜单。

许可证

本文没有明确的许可证附加到它,但可能包含在文章文本或下载文件本身中的使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.