我用listctrl显示数据库中的数据。现在想在上面加一个右键菜单。右键菜单的功能是对这一列进行响应。就是说我在任意一个格按右键,选菜单中某项,就能对这一列进行操作。请问应该如何通过菜单得到这一列?
解决方案 »
- VC6 转 VC9 CString问题
- vc中添加播放控件?
- CSDN的新闻问什么不能保存啊,很不爽,鄙视编辑*****************
- 我在建立工程的时候没有选支持Windows 套接字 我用的是CSocket类 怎么样才能支持Windows套接字
- 如何使对话框中的所有内容随对话框大小的改变而改变
- 问一个初初初初级的菜鸟问题,为什么GetWindowText()第一次能拿到EDIT框的值,第二次就拿不到了呢?
- VC6.0在那里下载
- OpenGL的图形只能在辅助库函数所建立的窗口里显示吗?不能在单文档或对话框里显示吗?
- MFC appwizard【dll】与 MFC appwizard[exe]有什么区别啊
- 能给介绍几本初学者用的关于vc的书吗?
- 精通VC开发数据库的请进!关于ADO数据操作的问题。
- 小女子才疏学浅~哪位GG能帮忙看看代码,谢谢,^_^是一个关闭socket的问题
重载右键单击,加入
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;
}
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的话,
// 你可以定义两个成员变量来保存这两个值
}