现在的位置: 首页 > 综合 > 正文

动态创建菜单时出错 afxwin1.inl 1023

2014年09月28日 ⁄ 综合 ⁄ 共 596字 ⁄ 字号 评论关闭

代码很简单,如下,写在 view 层的 OnChar 事件中

 CMenu cmu;
   cmu.CreateMenu();
   GetMenu()->AppendMenu(MF_POPUP,(UINT)cmu.m_hMenu,_T("电话本"));
   cmu.Detach();

 

以前按书上写是可以的,结果这里报错 提示 assert 失败  afxwin1.inl 1023

报错时,点击重试,进入报错的地点,发现是这么一句:

_AFXWIN_INLINE BOOL CMenu::AppendMenu(UINT nFlags, UINT nIDNewItem, LPCTSTR lpszNewItem)
 { ASSERT(::IsMenu(m_hMenu)); return ::AppendMenu(m_hMenu, nFlags, nIDNewItem, lpszNewItem); }

 

看来是ASSERT(::IsMenu(m_hMenu)) 失败,那么就是 菜单无效

 

综合以前的代码发现,以前是写在frame层的,这个是view层的,一想,菜单属于frame层,不属于view层,所以GetMenu() 获取不到东西。明白了错误所在,改下代码就ok了,如下,添加 GetParent():

GetParent()->GetMenu()->AppendMenu(MF_POPUP,(UINT)cmu.m_hMenu,_T("电话本"));

 

抱歉!评论已关闭.