该list control在一个子窗口里,在WM_COMMAND消息里截获不到右键菜单,该怎么控制呢?

解决方案 »

  1.   


    //ON_WM_CONTEXTMENU()消息void CTestMenuDlg::OnContextMenu(CWnd* pWnd, CPoint point) 
    {
    CPoint cp;
    GetCursorPos(&cp); CRect rectLeftListBox;
    CListBox *m_pLeftListBox = (CListBox*)GetDlgItem(IDC_TESTMENU_LIST);
    m_pLeftListBox->GetClientRect(&rectLeftListBox);
    ClientToScreen(rectLeftListBox); if(PtInRect(&rectLeftListBox, cp))
    {
    m_pRightMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, cp.x, cp.y, this) ;
    }
    }
      

  2.   

    处理错了吧,你应该在listctrl 的NM_RCLICK 事件里面处理
      

  3.   

    [Quote=引用 5 楼 oh_my_god 的回复:]
    处理错了吧,你应该在listctrl 的NM_RCLICK 事件里面处理同意
    在BEGIN_MESSAGE_MAP END_MESSAGE_MAP()之间添加ON_NOTIFY(NM_RCLICK, IDC_LIST, OnNMRclickList),IDC_LIST是需要处理的list controlID,OnNMRclickList是处理函数
    void CMyDlg::OnNMRclickList(NMHDR *pNMHDR, LRESULT *pResult)
    {
    *pResult = 0;
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    CPoint point;
    ::GetCursorPos(&point);
    CMenu menu;
    menu.LoadMenu(IDR_MENU); //读取资源,IDR_MENU为弹出的菜单ID
    menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, point.x,point.y,this);
    }至于菜单上命令的完成是通过另外一个消息函数处理,如你想处理菜单命令ID为ID_TEST
    ON_COMMAND(ID_POP_TRAYRETURN, OnTest)
    void CMyDlg::OnTest()
    {}
      

  4.   

    NM_RCLICK可以生成右键菜单
    COMMAND消息处理不了右键菜单的ID,我用的是SDK编的
      

  5.   

    你的ON_COMMAND菜单消息映射正确吗?