重写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(); } }}