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

来源:互联网 发布:arm7的寄存器数据宽度 编辑:程序博客网 时间:2024/05/29 12:27

代码很简单,如下,写在 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("电话本"));


 

0 0
原创粉丝点击