主窗体中有一个MENU,简单的举个问题的例子,主窗体MENU中的有个菜单 “管理”,点击管理,下拉“添加服务器”,“修改服务器”,“删除服务器”。我有个子窗体是树列表,在右击树列表的时候 ,弹出管理中的三个ITEM。 CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
CPoint pPoint;
GetCursorPos(&pPoint); menu.GetSubMenu(0).TrackPopupMenu(TPM_LEFTALIGN,pPoint.x,pPoint.y,m_hWnd);这样可以右击弹出主菜单中管理的内容,但是如何获得选中内容的ID呢?问题1:如何获取右击菜单选中项ID。
我的思路是 将获取选中的ID,通过::PostMessage(GetDesktopWindow(),ID,0,0);将子窗体的操作消息到主窗体,请问这样可取吗?问题2:思路是否有问题。问题解决必定效率结贴!

解决方案 »

  1.   

    得到选中ITEM的内容,进而得到ID。
      

  2.   

    用不着取菜单ID,用菜单ID直接和命令关联就可以了.h
    protected:
    //{{AFX_MSG(CGameView)
            //...
            afx_msg void OnBaseInfoShow();
    //}}AFX_MSG
    .cppIMPLEMENT_DYNCREATE(CGameView, CView)    BEGIN_MESSAGE_MAP(CGameView, CView)
        //{{AFX_MSG_MAP(CGameView)
        //...
            ON_COMMAND(IDC_CMD_BASICINFO,OnBaseInfoShow)
        //}}AFX_MSG_MAP
        END_MESSAGE_MAP()void fun()
    {
    CMenu menu;
    menu.LoadMenu(IDR_MAINFRAME);
    CPoint pPoint;
    GetCursorPos(&pPoint);
    menu.AppendMenu(MF_STRING, IDC_CMD_BASICINFO,       _T("基本信息"));
    menu.GetSubMenu(0).TrackPopupMenu(TPM_LEFTALIGN,pPoint.x,pPoint.y,m_hWnd);
    }
      

  3.   


    谢谢LS的热心回答,可能我表达的并不明确,我的问题是:主窗体和子窗体,并没有继承的关系,主窗体上做了如你所说的关联了,比如添加服务器有个ADD的函数,与命令消息做了关联,我在ADD()函数里做相应操作就可以,这是主窗体的做法。但是在子窗体里,并没有ADD()函数,有的只是同一个菜单项的ID,因此,我考虑向主窗体发消息的办法。希望有经验的高手给些提示
      

  4.   

    你在子菜单里也写一个命令关联函数在函数内SendMessage WM_COMMAND给主窗体,或直接调用主窗体的菜单项关联函数都可以的。
      

  5.   


    CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();pFrame->Fun();