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