MFC中ListCtrl列表控件的使用
来源:互联网 发布:艾佛森生涯数据 编辑:程序博客网 时间:2024/04/30 06:22
MFC中ListCtrl列表控件的使用
Latest Edit 2013/10/24
今天花了几个小时把ListCtrl的常用的使用方法学习了一下,做了一个具体的例子来熟悉里面的函数,下图是程序的一个界面;下面与大家分享一下。
先说明一下,建立工程文件中有关细节,如果有同学想跟着做一下也比较方便一点
工程名为:ListCtrl,基于Dialog,其他默认。
控件名与变量名的对应关系,我们从系统我们自动生成的函数中可以看到,
列表控件: IDC_LIST, 变量名为control变量 m_listCtrl
三个EDIT控件
姓名: IDC_NAME,变量名为CString类型m_strName
学号: IDC_SN ,变量名为CString类型m_strSN
年龄: IDC_AGE , 变量名为CString类型m_nAge
void CListCtrlDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);DDX_Control(pDX, IDC_LIST, m_listCtrl);DDX_Text(pDX, IDC_NAME, m_strName);DDX_Text(pDX, IDC_SN, m_strSN);DDX_Text(pDX, IDC_AGE, m_nAge);DDX_Text(pDX, IDC_SelColumn, m_strColumn);}
两个BUTTON
添加: IDC_OK , 对应的函数
void CListCtrlDlg::OnBnClickedOk()(UpdateData(TRUE);// TODO: 在此添加控件通知处理程序代码if (m_strName.IsEmpty()||m_strSN.IsEmpty()||m_nAge.IsEmpty()){MessageBox(_T("信息不完整"));return;}m_listCtrl.InsertItem(m_nCount,m_strName);m_listCtrl.SetItemText(m_nCount,1,m_strSN);m_listCtrl.SetItemText(m_nCount,2,m_nAge); m_strName.Empty();m_strSN.Empty(); m_nAge.Empty();UpdateData(FALSE);)
删除选中项:IDC_Del,void CListCtrlDlg::OnBnClickedDel(){// TODO: 在此添加控件通知处理程序代码 CString str; for (int i=0;i<m_listCtrl.GetItemCount();i++) { if (m_listCtrl.GetCheck(i)||m_listCtrl.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED) { str.Format(_T("%d被选中将被删除"),i+1); MessageBox(str); m_listCtrl.DeleteItem(i); m_nCount--; //用来统计列表有多少项,在头文件中有定义 it m_nCount,在构造函数中初始化为0 } }}
1.首先是ListCtrl中标题行的添加,里面涉及到一个函数,函数原型如下
int InsertColumn{int nCol, //表示列的索引LPCTSTR lpszColumnHeading, //也就是如姓名,年龄等文字int nFormat=LVCFMT_LEFT, //对齐方式,默认是左对齐int nWidth=-1, //表格的宽度,单位为像素int nSubItem=-1 //与列相关的字项索引}
2,设置ListCtrl风格的函数SetExtendStyle
LVS_EX_FULLROWSELECT //选中时行会高亮显示LVS_EX_GRIDLINES // 打上网格,默认是没有的LVS_EX_CHECKBOXES // 在第一行最前面有一个Checkbox
结合上面两个函数,做了一个ListCtrl的初始化函数
void CListCtrlDlg:: InitListCtrl(){m_listCtrl.InsertColumn(0,_T("姓名"),LVCFMT_LEFT,100);m_listCtrl.InsertColumn(1,_T("学号"),LVCFMT_LEFT,100);m_listCtrl.InsertColumn(2,_T("年龄"),LVCFMT_LEFT,50);DWORD dwStyle=m_listCtrl.GetExtendedStyle();dwStyle|=LVS_EX_FULLROWSELECT;dwStyle|=LVS_EX_GRIDLINES;dwStyle|=LVS_EX_CHECKBOXES;m_listCtrl.SetExtendedStyle(dwStyle);}
3.在ListCtrl中添加数据,涉及到两个函数,它们有多种重载方式,我这里就用了其中最常用的,感兴趣的可以去MSDN中查找。
这两个函数要结合使用,只能先用 InsertItem,然后再用SetItemText。在IDC_OK中有使用,前面有代码。
int InsertItem( int nItem, //所在行索引 LPCTSTR lpszItem //要写入的数据);BOOL SetItemText( int nItem, //所在行 int nSubItem, //所在列 LPTSTR lpszText //要写入的数据 );
4. 查找列表中哪些行中的checkbox被选中
这里用到了一个状态查找函数
GetItemState
GetCheck()
见“删除选中项"按钮的代码
5.得到单击列表时的行列号,
这里要为ListCtrl添加一个NM_CLICK的消息响应函数,在VS2008中的操作过程,见图
void CListCtrlDlg::OnNMClickList(NMHDR *pNMHDR, LRESULT *pResult){DWORD dwPos = GetMessagePos(); CPoint point( LOWORD(dwPos), HIWORD(dwPos) );m_listCtrl.ScreenToClient(&point);LVHITTESTINFO lvinfo;lvinfo.pt = point;lvinfo.flags = LVHT_ABOVE;int nItem = m_listCtrl.SubItemHitTest(&lvinfo);if(nItem != -1){m_strColumn.Format(_T("%d"),lvinfo.iItem);UpdateData(FALSE);}}6.在列表中右键,弹出菜单,这里也要为ListCtrl添加一个NM_RCLIK的消息响应函数。与上面的方法一致。
首先在资源管理器中添加菜单,IDC_MENU,然后为其中的菜单项添加响应函数中再次调用前面所用的删除函数。
void CListCtrlDlg::OnNMRClickList(NMHDR *pNMHDR, LRESULT *pResult){NM_LISTVIEW *pNMListView=(NM_LISTVIEW*)pNMHDR;if (pNMListView->iItem!=-1){DWORD dwPos=GetMessagePos();CPoint point(LOWORD(dwPos),HIWORD(dwPos));CMenu menu;VERIFY(menu.LoadMenu(IDR_MENU));CMenu *popup=menu.GetSubMenu(0);ASSERT(popup!=NULL);popup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);*pResult=0;}}想近一步学习的话,可以在参考以下两篇文章
http://blog.csdn.net/miaoxiyu/article/details/7312102#
http://www.cnblogs.com/lidabo/archive/2012/08/23/2652786.html
http://www.cnblogs.com/lidabo/archive/2012/08/23/2652786.html
- MFC中ListCtrl列表控件的使用
- MFC-ListCtrl(列表控件)
- MFC ListCtrl控件的使用
- MFC ListCtrl控件的使用
- MFC中listctrl的使用
- MFC中listctrl的使用
- MFC基本控件使用——列表控件(ListCtrl)
- MFC使用ListCtrl控件
- MFC控件使用之一 ListCtrl的使用
- MFC中列表控件的使用
- MFC Listctrl控件使用总结
- 今天在MFC中使用listctrl虚拟列表遇到的一点问题
- VC中ListCtrl控件的使用(一)
- VC中ListCtrl控件的使用(二)
- VC中ListCtrl控件的使用
- mfc中使用列表控件
- ListCtrl控件的使用
- ListCtrl控件的使用
- 【C++进阶】c++继承中的内存布局(转)
- 算法设计几个经典思维题目
- A. SMSC
- EasyUI的类似alert弹出框
- linux/android memory/flash layout
- MFC中ListCtrl列表控件的使用
- 写给大二的电子小组成员
- 汉字从拼音到文字的完整映射表
- 线程的分离状态
- 测试
- 安卓手机可以连上wifi但无法上网的解决办法
- 信号量,互斥体,自旋锁 && linux进程优先级、进程nice值
- C++ 字符串循环右移
- nginx--启动,重启,关闭命令