最近学习菜单,刚入门就遇见一个问题。问题描述如下:环境是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()就可以返回指向菜单对象的指针。