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

一种从一个菜单集切换到另一个菜单集的简单方法

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (9投票s)

2002 年 6 月 4 日

1分钟阅读

viewsIcon

97102

使用此函数替换当前菜单为另一组菜单。

基本目的

我今天花了几小时寻找一种从一个菜单集合(文件、编辑等)切换到另一个菜单集合的简单方法。我在 MSDN 中找到了这段代码,但我在 CodeProject 上没有看到类似的东西,所以这是我的第一篇文章。希望对某人有所帮助。

如何使用

private:
  void ReplaceMenu(UINT n_IDResource);
void CMainFrame::ReplaceMenu(UINT n_IDResource)
{
   CMenu NewMenu; // create the new CMenu variable
   NewMenu.LoadMenu(n_IDResource); 
      // Load the menu from the resource passed
   ASSERT(NewMenu);

   // Remove and destroy the old menu
   SetMenu(NULL);
   ::DestroyMenu(m_hMenuDefault); 
      // m_hMenuDefault is the menu member variable of CFrameWnd

   // Set the menu to the new menu we created
   SetMenu(&NewMenu);

   // Set the default menu handler to the handle of our new menu
   m_hMenuDefault = NewMenu.GetSafeHmenu();
}
ReplaceMenu(IDR_OTHERMENU);
  1. 在资源视图中创建多个菜单资源。我将使用的两个是 IDR_MAINFRAMEIDR_OTHERMENU
  2. 在你的 MainFrame.h(或其他 CFrameWnd 派生类)中声明该函数。
  3. 将以下内容添加到你的 MainFrame.cpp
  4. 在任何需要使用的地方,只需调用该函数并传递要使用的菜单资源即可。

结论

你仍然以相同的方式实现你的消息映射。虽然我建议你以不同的方式为你的菜单集合的菜单函数添加前缀(例如:OnView1TestMe()OnView2TestMe()),以便你可以轻松地分辨哪些函数属于哪个菜单集合。请记住,这是我的第一篇文章,我会阅读反馈,但请对我温柔一些。我一直在分割视图、替换视图、打印不同视图以及在分割视图中进行此类操作方面做了很多工作。我希望在几个月后写另一篇关于这些内容的文章。

许可证

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

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

© . All rights reserved.