问题:GetMenu函数没有返回菜单栏指针,编程环境是visual studio 2010.(在VC6.0没有这问题)
GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND | MF_CHECKED);
编译正确,但是调试的时候出现ASSERT错误。错误在下面这个函数(指向函数体一行)
_AFXWIN_INLINE CMenu* CMenu::GetSubMenu(int nPos) const
{ ASSERT(::IsMenu(m_hMenu)); return CMenu::FromHandle(::GetSubMenu(m_hMenu, nPos)); }
由错误可以推断GetMenu函数没有返回菜单栏指针,通过跟踪GetMenu的返回值,m_hMenu的值:错误没有找到符号"".
解决方法一:
要改变某个非顶级菜单时,添加ON_UPDATE_COMMAND_UI()消息处理,比如:
例如:
void CMainFrame::OnUpdateTestHwl(CCmdUI *pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(FALSE);
}
方法2:
解决的办法就是:在新建项目---MFC应用程序向导过程中的“用户界面功能”---命令栏(菜单/工具栏/功能区)---选择“使用经典菜单(S)”