下面是我弄的,,可是不知道该怎么删
//消息处理
LRESULT UserListViewNotify (HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HINSTANCE hInst=GetModuleHandle(NULL);
switch (((LPNMHDR) lParam)->code)
{
case NM_RCLICK:
   {
NMITEMACTIVATE *lpnmitem = (LPNMITEMACTIVATE) lParam;
HMENU hMenu,hTrackMenu;
POINT point;
//char szBuffer[80];
if(lpnmitem->iItem!=-1)
{
//wsprintf(szBuffer,"你点击的是第%d行,第%d列\n",lpnmitem->iItem,lpnmitem->iSubItem);
//MessageBox(lpnmitem->hdr.hwndFrom,szBuffer,TEXT("TEST"),MB_OK);
GetCursorPos(&point);
hMenu=LoadMenu(hInst,TEXT("USERPOPUP"));
hTrackMenu = GetSubMenu (hMenu, 0);
TrackPopupMenu(hTrackMenu,TPM_LEFTALIGN,point.x,point.y,0,hwnd,NULL);
}
else
return FALSE;
   }
break;
case IDM_USER_DEL:
   {
    char szBuffer[80];
    wsprintf(szBuffer,"你删除的是第%d行,第%d列\n",lpdel->iItem,lpdel->iSubItem);
MessageBox(hwnd,szBuffer,TEXT("TEST"),MB_OK);
   }
break;
}

return TRUE;
}

解决方案 »

  1.   

    CListCtrl& theCtrl = GetListCtrl();
    theCtrl.DeleteItem(num); //num为行号
      

  2.   

    //消息处理
    LRESULT UserListViewNotify (HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
    {
    HINSTANCE hInst=GetModuleHandle(NULL);
    switch (((LPNMHDR) lParam)->code)
    {
    case NM_RCLICK:
       {
    NMITEMACTIVATE *lpnmitem = (LPNMITEMACTIVATE) lParam;
    HMENU hMenu,hTrackMenu;
    POINT point;
    //char szBuffer[80];
    if(lpnmitem->iItem!=-1)
    {
    //wsprintf(szBuffer,"你点击的是第%d行,第%d列\n",lpnmitem->iItem,lpnmitem->iSubItem);
    //MessageBox(lpnmitem->hdr.hwndFrom,szBuffer,TEXT("TEST"),MB_OK);
    GetCursorPos(&point);
    hMenu=LoadMenu(hInst,TEXT("USERPOPUP"));
    hTrackMenu = GetSubMenu (hMenu, 0);
    TrackPopupMenu(hTrackMenu,TPM_LEFTALIGN,point.x,point.y,0,hwnd,NULL);
    }
    else
    return FALSE;
       }
    break;
    case IDM_USER_DEL:
       {
        POINT point;
    DWORD dwpoint;
    char szBuffer[80];
    dwpoint=GetMessagePos();
    point.x=LOWORD(dwpoint);
    point.y=HIWORD(dwpoint);
    ScreenToClient(hwnd,&point);
    LVHITTESTINFO pInfo;
    ZeroMemory(&pInfo,sizeof(pInfo));
    pInfo.pt=point;
    pInfo.flags=LVHT_ONITEMICON|LVHT_ONITEMLABEL|LVHT_ONITEMSTATEICON;
    if(ListView_HitTest(hwnd,&pInfo)!=-1)
    {
    wsprintf(szBuffer,"你删除的是第%d行,第%d列\n",pInfo.iItem,pInfo.iSubItem);
    MessageBox(hwnd,szBuffer,TEXT("TEST"),MB_OK);
    }
       }
    break;
    }

    return TRUE;
    }
    在处理右键菜单IDM_USER_DEL时,,获取不到行号和列号
      

  3.   

    CListCtrl& theCtrl = GetListCtrl(); 
    int nSelect = theCtrl.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED);
    theCtrl.DeleteItem(nSelect ); //nSelect 为行号
      

  4.   

    //消息处理 
    LRESULT UserListViewNotify (HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) 

    HINSTANCE hInst=GetModuleHandle(NULL); 
    switch (((LPNMHDR) lParam)->code) 

    case NM_RCLICK: 
      { 
    NMITEMACTIVATE *lpnmitem = (LPNMITEMACTIVATE) lParam; 
    HMENU hMenu,hTrackMenu; 
    POINT point; 
    //char szBuffer[80]; 
    if(lpnmitem->iItem!=-1) 

    //wsprintf(szBuffer,"你点击的是第%d行,第%d列\n",lpnmitem->iItem,lpnmitem->iSubItem); 
    //MessageBox(lpnmitem->hdr.hwndFrom,szBuffer,TEXT("TEST"),MB_OK); 
    GetCursorPos(&point); 
    hMenu=LoadMenu(hInst,TEXT("USERPOPUP")); 
    hTrackMenu = GetSubMenu (hMenu, 0); 
    TrackPopupMenu(hTrackMenu,TPM_LEFTALIGN,point.x,point.y,0,hwnd,NULL); 

    else 
    return FALSE; 
      } 
    break; 
    case IDM_USER_DEL: 
      { 
      POINT point; 
    DWORD dwpoint; 
    char szBuffer[80]; 
    dwpoint=GetMessagePos(); 
    point.x=LOWORD(dwpoint); 
    point.y=HIWORD(dwpoint); 
    ScreenToClient(hwnd,&point); 
    LVHITTESTINFO pInfo; 
    ZeroMemory(&pInfo,sizeof(pInfo)); 
    pInfo.pt=point; 
    pInfo.flags=LVHT_ONITEMICON|LVHT_ONITEMLABEL|LVHT_ONITEMSTATEICON; 
    if(ListView_HitTest(hwnd,&pInfo)!=-1) 

    wsprintf(szBuffer,"你删除的是第%d行,第%d列\n",pInfo.iItem,pInfo.iSubItem); 
    MessageBox(hwnd,szBuffer,TEXT("TEST"),MB_OK); 

      } 
    break; 
    } return TRUE; 

    我这个怎么改一下就好了,,我这是SDK的,,不是MFC的,
      

  5.   

    你这也太复杂了,像你这样开发还不累死人。switch (((LPNMHDR) lParam)->code)
    {
    case NM_RCLICK:
      {
    NMITEMACTIVATE *lpnmitem = (LPNMITEMACTIVATE) lParam;
    HMENU hMenu,hTrackMenu;
    POINT point;
    //char szBuffer[80];
    if(lpnmitem->iItem!=-1)
    {
    //wsprintf(szBuffer,"你点击的是第%d行,第%d列\n",lpnmitem->iItem,lpnmitem->iSubItem);
    //MessageBox(lpnmitem->hdr.hwndFrom,szBuffer,TEXT("TEST"),MB_OK);
    GetCursorPos(&point);
    hMenu=LoadMenu(hInst,TEXT("USERPOPUP"));
    hTrackMenu = GetSubMenu (hMenu, 0);
    UINT nCmd = TrackPopupMenu(hTrackMenu,TPM_LEFTALIGN|TPM_RETURNCMD,point.x,point.y,0,hwnd,NULL);
    if( nCmd == IDM_USER_DEL )
    {
    wsprintf(szBuffer,"你删除的是第%d行,第%d列\n",lpnmitem->iItem,lpnmitem->iSubItem);
    MessageBox(hwnd,szBuffer,TEXT("TEST"),MB_OK);
    }
    else
    return FALSE;
      }
    break;
    }return TRUE;
    }
      

  6.   

    非常感谢楼上所有朋友帮助,由其是ylmbtm因为你的回答我才注意到TrackPopupMenu的反回值。
    再次感谢ylmbtm