我作了一个资源管理器形式的程序,右面的视图用的是CListView的详细列表
我想用鼠标右击一项弹出一个上下文菜单,我是如下实现的,
//CLAView是CListView
void CLAView::OnContextMenu(CWnd* pWnd, CPoint point) 
{
DWORD dwPos=::GetMessagePos();
CPoint pos((int)LOWORD(dwPos),(int)HIWORD(dwPos));
// TODO: Add your message handler code here
GetListCtrl().ScreenToClient(&pos);
int nIndex;
if((nIndex=GetListCtrl().HitTest(pos))!=-1)
{
CString str=GetListCtrl().GetItemText(nIndex,0);
CMenu menu;
menu.LoadMenu(IDR_POP);
CMenu* pContextMenu=menu.GetSubMenu(0); pContextMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,pos.x,pos.y,this);
}
CWnd::OnContextMenu(pWnd,point);
}但是当鼠标右击某一项时菜单在鼠标右击位置的左上,而且离得很远
我也直接用过函数的参数point但是效果是一样的
请问怎么才能让上下文菜单显示在鼠标右击的地方???

解决方案 »

  1.   

    直接用point,不要转换。
    之后连菜单也显示不出来了
    急呀请大家帮帮忙
      

  2.   

    显示不出菜单是因为
    if((nIndex=GetListCtrl().HitTest(pos))!=-1)
    这一句都没进吧
    这里的pos要用Client坐标的
    CPoint pos = point;
    ScreenToClient(pos);
    if((nIndex=GetListCtrl().HitTest(pos))!=-1)

    pContextMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,pos.x,pos.y,this);
    这里要用Screen坐标的,改成
    pContextMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,point.x,point.y,this);