我用listctrl显示数据库中的数据。现在想在上面加一个右键菜单。右键菜单的功能是对这一列进行响应。就是说我在任意一个格按右键,选菜单中某项,就能对这一列进行操作。请问应该如何通过菜单得到这一列?

解决方案 »

  1.   

    通过listctrl取得他的被选中的item即可。
      

  2.   

    先const UINT ID_DEL = 1;
    重载右键单击,加入
    CPoint point;
    CMenu menu;
    ::GetCursorPos(&point);
    menu.CreatePopupMenu();
    menu.AppendMenu(MF_STRING, ID_DEL, (LPCTSTR)"删除");
    menu.TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, point.y, this);然后添加消息映射
    ON_COMMAND(ID_DEL,OnDel)
    添加OnDel函数
    在OnDel中得到选中的行并进行操作就可以了
    如int nItem = m_list.GetNextItem(-1,LVNI_SELECTED);
    m_list.DeleteItem(nItem);
    可以多行删除
    for (int iItem=m_list.GetNextItem(-1,LVNI_SELECTED); iItem!=-1; iItem=m_list.GetNextItem(iItem,LVNI_SELECTED))
    {
    m_list.DeleteItem(iItem);
    --iItem;
    }
      

  3.   

    CListCtrl m_listctrl;在ListCtrl的NM_RCLICK事件中处理
    CPoint point;
    GetCursorPos(&point);
    m_listctrl.ScreenToClient(&point);HITTESTINFO info;
    info.pt = point;
    int nItem = m_listctrl.HitTest(&info);
    if (nItem != -1)
    {
    // info.iItem即为右键点中的ListCtrl的Item
    // info.iSubItem即为右键点中的ListCtrl的Item的SubItem(即你所需要的列) // 现在你可以根据info.iSubItem的值来进行处理
    // 如果你在菜单响应事件中还要使用右键点中的ListCtrl的Item和SubItem的话,
    // 你可以定义两个成员变量来保存这两个值
    }
      

  4.   

    HITTESTINFO 应该includ哪个文件??