在菜单中搜索某项指定ID菜单经过的路径

//获取菜单路径
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"));
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值