CMenu menu;
if(menu.LoadMenu(IDR_MENU2))
{
((CMenu*)menu.GetSubMenu(0))->ModifyMenu(MF_STRING,MF_BYPOSITION,0,(LPCTSTR)id1);
((CMenu*)menu.GetSubMenu(1))->ModifyMenu(MF_STRING,MF_BYPOSITION,1,(LPCTSTR)id2);
((CMenu*)menu.GetSubMenu(0))->TrackPopupMenu(TPM_LEFTBUTTON | TPM_LEFTALIGN,
point.x, point.y,this);
}问一下,为什么在
((CMenu*)menu.GetSubMenu(1))->ModifyMenu(MF_STRING,MF_BYPOSITION,1,(LPCTSTR)id2);
这里跟进去GetSubMenu里面的menu句柄忽然空了,导致这句话最后报错,我前面LoadMenu是成功的,而且前面GetSubMenu(0)是正确的,这个菜单是点击右键出来的菜单,而且有3个菜单项,我想知道是什么原因就是跟到这儿的时候
CMenu* PASCAL CMenu::FromHandle(HMENU hMenu)
{
CHandleMap* pMap = afxMapHMENU(TRUE); // create map if not exist
ASSERT(pMap != NULL);
CMenu* pMenu = (CMenu*)pMap->FromHandle(hMenu);
ASSERT(pMenu == NULL || pMenu->m_hMenu == hMenu);
return pMenu;
}传进来的hMenu为空,但是我又不知道是什么地方调用的这个FromHandle,直接F11跟进来了
if(menu.LoadMenu(IDR_MENU2))
{
((CMenu*)menu.GetSubMenu(0))->ModifyMenu(MF_STRING,MF_BYPOSITION,0,(LPCTSTR)id1);
((CMenu*)menu.GetSubMenu(1))->ModifyMenu(MF_STRING,MF_BYPOSITION,1,(LPCTSTR)id2);
((CMenu*)menu.GetSubMenu(0))->TrackPopupMenu(TPM_LEFTBUTTON | TPM_LEFTALIGN,
point.x, point.y,this);
}问一下,为什么在
((CMenu*)menu.GetSubMenu(1))->ModifyMenu(MF_STRING,MF_BYPOSITION,1,(LPCTSTR)id2);
这里跟进去GetSubMenu里面的menu句柄忽然空了,导致这句话最后报错,我前面LoadMenu是成功的,而且前面GetSubMenu(0)是正确的,这个菜单是点击右键出来的菜单,而且有3个菜单项,我想知道是什么原因就是跟到这儿的时候
CMenu* PASCAL CMenu::FromHandle(HMENU hMenu)
{
CHandleMap* pMap = afxMapHMENU(TRUE); // create map if not exist
ASSERT(pMap != NULL);
CMenu* pMenu = (CMenu*)pMap->FromHandle(hMenu);
ASSERT(pMenu == NULL || pMenu->m_hMenu == hMenu);
return pMenu;
}传进来的hMenu为空,但是我又不知道是什么地方调用的这个FromHandle,直接F11跟进来了
==是这样的三个菜单项吗?
MENUA MENUB MENUC
--SMENUA
--SMENUB
--SMENUC
--SMENUD
是有这样的MENUA,MENUB和MENUC三个菜单项么?
MENUA
--SMENUA
--SMENUB
--SMENUC
那我要获得其中的第二项怎么获得,就是--SMENUB这一项
((CMenu*)menu.GetSubMenu(0))->ModifyMenu(MF_STRING,MF_BYPOSITION,1,(LPCTSTR)id2);
这里的1就是指修改第二项的属性
ModifyMenu中的1不是修改的第二项,这样修改的还是第一项,至少我试的结果是这样,谢谢
((CMenu*)menu.GetSubMenu(0))->ModifyMenu(1,MF_BYPOSITION,ID_ID2,(LPCTSTR)id2);第一个参数代表该项下的第几个子项结贴散分,谢谢happyparrot