int count = ::GetMenuItemCount(hmenu);
//值=6,一共6项,第2到第5项都是子菜单(0为第一项)
for(int nItem = 0; nItem < count; nItem++) 
{  
    CString str;
    str.Format("nItem=%d",nItem);
    MessageBox(str);
   if(iItem == ::GetMenuItemID(hmenu, nItem)) 
     {    
       return;   
     }
  
}
问题是当菜单项是弹出菜单时,nItem不是正确得到位置值,比如应该是2,这时弹出子菜单,但是他却显示5,如何得到正确地位置呢?

解决方案 »

  1.   

    我就是想得到当前选中菜单项的位置,是第几个?上面的代码方法是遍历菜单,如果是当前选中的那个菜单项,就MessageBox出他的位置.如果是一般项,就能正确得到,但是当该项有子菜单时,却不能得到正确的位置.
      

  2.   

    用CMenu* GetSubMenu( int nPos )。如果是不是子菜单返回的是NULL,如果不是子菜单返回的是指向该子菜单的指针。
    再做想做的操作就可以啦。
      

  3.   

    写错啦,不好意思,不好意思。用CMenu* GetSubMenu( int nPos )。如果不是子菜单返回的是NULL,如果是子菜单返回的是指向该子菜单的指针。
    再做想做的操作就可以啦。
      

  4.   

    GetSubMenu(int nPos)是可以判断是否有子菜单,但是,如果有子菜单,你怎么知道就是我们选中的那个项呢,因为不止一个自菜单,所以你要用iD来判断,看看ID是不是,但是这样的菜单又是没有ID的,怎么判断?
      

  5.   

    继续用GetSubMenu(int nPos),比如;GetSubMenu(int nPos)->GetSubMenu(int nPos)再进行操作
      

  6.   

    我是说并列的多个子菜单,不是下一级.
    在循环的过程中,会得到所有的含有子菜单的项,而每个含有子菜单的项都没有ID(因为MF_POPUP),所以问题是如何才能判断到底是那个菜单项弹出了子菜单?