再一个继承自CFormView的view中,加入了dlg.然后再该dlg上放了一个listctrl,该listctrl室report形式的然后我需要在该listctrl上响应右键弹出菜单
菜单已经做好了,我在资源管理中加入了一个菜单资源test,其下有三个子菜单void OnRclickListSection(NMHDR* pNMHDR, LRESULT* pResult) 
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
int index = pNMLV->iItem;
if (index == -1)
return;

CPoint pt;
CRect rc;
GetWindowRect(&rc);
GetCursorPos(&pt); //鼠标位置
CMenu *pMenu = new CMenu;

pMenu->LoadMenu(IDR_MENU1);
CMenu* pMenu1 = pMenu->GetSubMenu(0);

pMenu1->TrackPopupMenu(TPM_LEFTALIGN|TPM_RETURNCMD,pt.x,pt.y,this);

*pResult = 0;
}
然后我对这三个子菜单都使用classwaizd加入了右键单击消息,但是没有响应阿
我使用
void OnContextMenu(CWnd* pWnd, CPoint point) 
函数,但是这只能响应一个子菜单的消息阿,怎么样可以控制和响应这三个菜单的消息
谢谢

解决方案 »

  1.   

    我是这样写的, 响应的是鼠标右键点击.void COwnFileListView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
    {
    CPoint curpos,tmppos;
    GetCursorPos(&curpos);
    tmppos = curpos;
    ScreenToClient(&tmppos);
    if (GetListCtrl().HitTest(tmppos) != -1) {
    CMenu lmenu;
    CMenu* pmenu;
    if (lmenu.LoadMenu(IDR_MENU_LIST)) {
    pmenu = lmenu.GetSubMenu(0);
    pmenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, curpos.x, curpos.y, this);
    }
    }
    }
      

  2.   

    我的意思是说,如何响应pop菜单的左键点击事件
    谢谢
      

  3.   

    如果你弄不清楚消息流程的话,这个弹出菜单中的菜单所属窗口(你这里是this)和菜单处理消息应该是同一个。
      

  4.   

    void COwnFileListView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
    {
    CPoint curpos,tmppos;
    GetCursorPos(&curpos);
    tmppos = curpos;
    ScreenToClient(&tmppos);
    if (GetListCtrl().HitTest(tmppos) != -1) {
    CMenu lmenu;
    CMenu* pmenu;
    if (lmenu.LoadMenu(IDR_MENU_LIST)) {
    pmenu = lmenu.GetSubMenu(0);
    pmenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, curpos.x, curpos.y, this);
    }
    }
    }