//获取菜单路径
BOOL GetMenuPath(HMENU hMenu, UINT uIDM, CStringArray &szPath)
{
//按位置搜索ID
for(int iPos=0; iPos<GetMenuItemCount(hMenu); iPos++)
{
//获取菜单信息
TCHAR szString[128];
MENUITEMINFO mInfo;
memset(&mInfo, 0, sizeof(mInfo));
mInfo.cbSize = sizeof(mInfo);
mInfo.fMask = MIIM_ID | MIIM_SUBMENU | MIIM_STRING;
memset(szString, 0, sizeof(szString));
mInfo.dwTypeData = szString;
mInfo.cch = _countof(szString);
if(!GetMenuItemInfo(hMenu, iPos, TRUE, &mInfo))
{
ASSERT(0);
continue;
}
if(mInfo.hSubMenu) /*子菜单*/
{
if(GetMenuPath(mInfo.hSubMenu, uIDM, szPath))
{
szPath.InsertAt(0, szString);
return TRUE;
}
}
else if(mInfo.wID == uIDM) //ID匹配
{
szPath.InsertAt(0, szString);
return TRUE;
}
else
{
}
}
return FALSE;
}
//测试用例
void CDlg4Dlg::OnButton1()
{
CMenu m;
m.LoadMenu(IDR_MENU1);
CStringArray szMenuPath;
GetMenuPath(m.m_hMenu, ID_MENUITEM32780, szMenuPath);
for(INT_PTR i=0; i<szMenuPath.GetSize(); i++)
{
TRACE(_T("==>%s"), (LPCTSTR)szMenuPath[i]);
}
TRACE(_T("\n"));
}