MFC 修改MF_POPUP菜单项文本的方法有点特别,记录下来备忘。
CMenu* popup = m_menu.GetSubMenu(posTab);
CMenu popupNew;
popupNew.Attach(popup->m_hMenu);
BOOL ret = m_menu.ModifyMenu(posTab, MF_BYPOSITION | MF_POPUP,
(UINT_PTR)popupNew.m_hMenu, name);
if (ret == false) {
TRACE("ModifyMenu() fail<%d>\n",GetLastError());
}
popupNew.Detach();
关键点是ModifyMenu()函数会把关联的下级菜单的句柄与菜单文本一起修改,因此需要把之前关联的下级菜单提取出来,调用ModifyMenu()把它放回去。