VS2010 MFC 用默认设置生成的应用程序GetMenu返回空值

在VS2010环境下,一个默认设置的MFC应用程序在尝试通过GetMenu获取主菜单指针时返回空值。原因是使用了CMFCMenuBar而非CMenu。解决方法是通过CMFCMenuBar的m_hMenu成员或GetHMenu()函数获取菜单句柄,再用CMenu::FromHandle转换为菜单对象。另一种方案是在工程创建时选择使用经典菜单。
摘要由CSDN通过智能技术生成

           最近学习菜单,刚入门就遇见一个问题。问题描述如下:环境是VS2010,生成一个单文档但非文档视图结构的应用程序MenuTest,其余都是默认选项。然后在MenuTest.cpp的InitInstance()函数中想调用GetMenu()返回主菜单指针,结果却返回空值。

       原因是VS2010菜单不再使用CMenu,而是CMFCMenuBar,所以需要从这个对象里获取主菜单的指针。

       CMFCMenuBar 里又这样一个成员HMENU m_hMenu,它应该是主菜单句柄。

       还有个HMENU GetHMenu() const { return m_hMenu; }

       所以我在MenuTest.h文件里添加了一个函数

 HMENU GetMenuHMENU() {return m_wndMenuBar.GetHMenu();}

这样获得菜单句柄之后可以通过CMenu::FromHandle(HMENU hMenu)来获得菜单对象。

       另一种解决方法是在创建工程的过程中,大致在第4个Next,选中use a classic Menu,然后直接调用GetMenu()就可以返回指向菜单对象的指针。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值