重写clistctl中右键弹出菜单

来源:互联网 发布:淘宝没有达人淘 编辑:程序博客网 时间:2024/06/05 10:25
void CPPListCtrl::OnRButtonDown( UINT nFlags, CPoint ptt ){    CRect rc;    GetWindowRect(&rc);    ScreenToClient(&rc);    CPoint pt = ptt;    //点在矩形中,并且里面有数据    int iItemCount = GetItemCount();    if (rc.PtInRect(pt) && 0 < iItemCount)    {                //判断点是否在每一项上面        CRect rectBound;        //点是否在该item上面        BOOL bIsIn= FALSE;        //获取选中的数量        int iSelNum = GetSelectedCount();                int iCurIndexItem = HitTest(pt);        //没有在item上        if (-1 != iCurIndexItem)        {            bIsIn = TRUE;            UINT uStatus = GetItemState(iCurIndexItem, LVIS_SELECTED);            //如果没有选中            if (!(uStatus&LVIS_SELECTED))            {                 for (int i = 0; i < iItemCount; i++)                 {                     SetItemState(i,  0,LVIS_FOCUSED | LVIS_SELECTED);                 }                 SetItemState(iCurIndexItem,  LVIS_FOCUSED | LVIS_SELECTED,LVIS_FOCUSED | LVIS_SELECTED);            }        }        //如果在这个item上面,那么就弹出菜单        if (bIsIn)        {            CMenu menuTest;            BOOL bTest = menuTest.CreatePopupMenu();            CString strTemp;            int iMenuID = IDM_POPUP_DEL_JOB;            for (int  i =0 ; i < 4; i++)            {                     g_LoadMenuStringsFromProfile(iMenuID, strTemp);                menuTest.AppendMenu(MF_POPUP, iMenuID++, strTemp);            }            ClientToScreen(&pt);            menuTest.TrackPopupMenu(TPM_LEFTALIGN , pt.x, pt.y, this);            menuTest.Detach();        }    }}