MFC列表控件ListCtrl如图:

列表控件ListCtrl样式属性(风格)有:
Icon大图标,SmallIcon小图标、List列表、Report报告 ,但今天只谈Report报告样式:

一:基本操作

1.

(1)InsertItem --- 插入一个主项(行)
(2)DeleteItem --- 删除一个主项 (行)
(3)InsertColumn --- 插入一个列
(4)DeleteColumn --- 删除一个列 (索引从0开始)
(5)SetItemText --- 设置子项文本
(6)GetItemText --- 获得子项文本
(7)GetItemCount --- 获得项目的总数(总行数目)
(8)SetImageList --- 把图像列表与列表控件关联(设置列表图标需要)
-------------------------------------------------------
用法:
(1)InsertItem()  //插入一行// 可以插入图片(失败则图片不能显示)
int InsertItem(const LVITEM* pItem);// 插入文字
int InsertItem(int nItem,  //第几行LPCTSTR lpszItem  //该行第1列的文字);-------------------------------------------------------
(2)DeleteItem(iItem); //根据行号删除某行。
注意:若要删除多行时,需要从后面开始删除,因为如果从前面开始删除的话,下面的行会往上移,原来第1行就变成了第0行。错误删法:m_listctrl.DeleteItem(0);m_listctrl.DeleteItem(1)正确删法:
m_listctrl.DeleteItem(1);
m_listctrl.DeleteItem(0);
-------------------------------------------------------
(3)InsertColumn() //插入1列
int InsertColumn(int nCol,     // 第几列LPCTSTR lpszColumnHeading,   //列名int nFormat = LVCFMT_LEFT,  // 对齐的方式int nWidth = -1,  //该列的宽度int nSubItem = -1  //子项的索引与列(一般缺省默认即可,可不填));对齐的方式有3种:LVCFMT_LEFT (左对齐)LVCFMT_CENTER (居中)LVCFMT_RIGHT (右对齐)
-------------------------------------------------------
(4)DeleteColumn --- 删除一个列 (索引从0开始)
//注意:删除多列要从后往前删,否则出错 
for(int k=2;k>=0;k--) m_ListCtrl.DeleteColumn(k); -------------------------------------------------------
(5)SetItemText()  //设置文字
BOOL SetItemText(int nItem,  //第几行int nSubItem,  //低级列LPCTSTR lpszText  //文字内容);-------------------------------------------------------

2.设置列表控件的扩展样式

SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES) ;常用的扩展样式:
LVS_EX_GRIDLINES---网格线LVS_EX_CHECKBOXES---每一行的最前面带个复选框LVS_EX_FULLROWSELECT---整行选中LVS_EX_HEADERDRAGDROP---列表头可以拖动(改变位置)

二:用法案例

1.如图,布局界面

2.关联变量

“备注”编辑框ID改为:IDC_EDIT_DATA5
“总数”编辑框ID改为:IDC_EDIT2_TOTAL

3.在对话框初始化函数OnInitDialog()中设置列表控件的风格、插入表头、设置列宽等
代码如下:

BOOL CTestListCtrlDlg::OnInitDialog()
{CDialog::OnInitDialog();//XXXXXX//默认代码//XXXXXX// TODO: Add extra initialization hereEnableWindowSet(FALSE); //默认某些按钮初始化为禁用//属性:网格线、整行选中、CheckBox、列表头可以拖动(改变位置)m_ListData.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES |LVS_EX_HEADERDRAGDROP);//插入表头/列名m_ListData.InsertColumn(0,_T("日期"),LVCFMT_CENTER);m_ListData.InsertColumn(1,_T("星期"),LVCFMT_CENTER);m_ListData.InsertColumn(2,_T("时间"),LVCFMT_CENTER);m_ListData.InsertColumn(3,_T("Data1"),LVCFMT_CENTER);m_ListData.InsertColumn(4,_T("Data2"),LVCFMT_CENTER);m_ListData.InsertColumn(5,_T("Data3"),LVCFMT_CENTER);m_ListData.InsertColumn(6,_T("Data4"),LVCFMT_CENTER);m_ListData.InsertColumn(7,_T("备注"),LVCFMT_CENTER);//设置列宽m_ListData.SetColumnWidth(0,80);m_ListData.SetColumnWidth(1,80);m_ListData.SetColumnWidth(2,80);m_ListData.SetColumnWidth(3,95);m_ListData.SetColumnWidth(4,95);m_ListData.SetColumnWidth(5,95);m_ListData.SetColumnWidth(6,95);m_ListData.SetColumnWidth(7,80);if (m_ListData.GetItemCount()<=0){//总数默认为0GetDlgItem(IDC_EDIT2_TOTAL)->SetWindowText(_T("0"));}return TRUE;  // return TRUE  unless you set the focus to a control
}

4.为按钮“插入数据”添加单击事件:

void CTestListCtrlDlg::OnButtonInsert()
{EnableWindowSet(TRUE); //启用右边按钮等控件
}

EnableWindowSet函数:

//禁用或启用相关控件
void CTestListCtrlDlg:: EnableWindowSet(BOOL show)
{if (show){GetDlgItem(IDC_STATIC1)->EnableWindow(TRUE);GetDlgItem(IDC_EDIT_DATA1)->EnableWindow(TRUE);GetDlgItem(IDC_STATIC2)->EnableWindow(TRUE);GetDlgItem(IDC_EDIT_DATA2)->EnableWindow(TRUE);GetDlgItem(IDC_STATIC3)->EnableWindow(TRUE);GetDlgItem(IDC_EDIT_DATA3)->EnableWindow(TRUE);GetDlgItem(IDC_STATIC4)->EnableWindow(TRUE);GetDlgItem(IDC_EDIT_DATA4)->EnableWindow(TRUE);GetDlgItem(IDC_Tip)->EnableWindow(TRUE);GetDlgItem(IDC_EDIT_DATA5)->EnableWindow(TRUE);GetDlgItem(IDC_BUTTON_ENSURE_INSERT)->EnableWindow(TRUE);GetDlgItem(IDC_BUTTON_OK)->EnableWindow(TRUE);}else{GetDlgItem(IDC_STATIC1)->EnableWindow(FALSE);GetDlgItem(IDC_EDIT_DATA1)->EnableWindow(FALSE);GetDlgItem(IDC_STATIC2)->EnableWindow(FALSE);GetDlgItem(IDC_EDIT_DATA2)->EnableWindow(FALSE);GetDlgItem(IDC_STATIC3)->EnableWindow(FALSE);GetDlgItem(IDC_EDIT_DATA3)->EnableWindow(FALSE);GetDlgItem(IDC_STATIC4)->EnableWindow(FALSE);GetDlgItem(IDC_EDIT_DATA4)->EnableWindow(FALSE);GetDlgItem(IDC_Tip)->EnableWindow(FALSE);GetDlgItem(IDC_EDIT_DATA5)->EnableWindow(FALSE);GetDlgItem(IDC_BUTTON_ENSURE_INSERT)->EnableWindow(FALSE);GetDlgItem(IDC_BUTTON_OK)->EnableWindow(FALSE);}
}

隐藏或显示相关控件为:

5.“插入数据”按钮:

//确定插入数据
void CTestListCtrlDlg::OnButtonEnsureInsert()
{//或取系统时间SYSTEMTIME SystemTime;GetLocalTime(&SystemTime);//年月日CString strDate;strDate.Format(_T("%d/%d/%d"),SystemTime.wYear,SystemTime.wMonth,SystemTime.wDay);//星期CString strDayOfWeek;switch(SystemTime.wDayOfWeek) {case 1 :strDayOfWeek = _T("星期一");break;case 2 :strDayOfWeek = _T("星期二");break;case 3 :strDayOfWeek = _T("星期三");break;case 4 :strDayOfWeek = _T("星期四");break;case 5 :strDayOfWeek = _T("星期五");break;case 6 :strDayOfWeek = _T("星期六");break;case 7 :strDayOfWeek = _T("星期日");break;default:;}
//从右侧编辑框中获取输入的数据,再插入到列表框中CString TempmData1;CString TempmData2;CString TempmData3;CString TempmData4;CString TempmData5;GetDlgItem(IDC_EDIT_DATA1)->GetWindowText(TempmData1);GetDlgItem(IDC_EDIT_DATA2)->GetWindowText(TempmData2);GetDlgItem(IDC_EDIT_DATA3)->GetWindowText(TempmData3);GetDlgItem(IDC_EDIT_DATA4)->GetWindowText(TempmData4);GetDlgItem(IDC_EDIT_DATA5)->GetWindowText(TempmData5);int Num = m_ListData.GetItemCount();//获取项目的总数(总行数目) CString str;str.Format(_T(" %d"),Num+1);GetDlgItem(IDC_EDIT2_TOTAL)->SetWindowText(str);TempmData5+=str;//插入数据   注意:ListView控件第一列无法居中,如果需要第一列居中,则第一列宽度设为0,从第二开始使用。CString strTime;strTime.Format(_T("%2d:%02d:%2d"),SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond);m_ListData.InsertItem(0,strDate);//插入一个主项(行) 并将数据(日期)写入第一列m_ListData.SetItemText(0,1,strDayOfWeek);//设置子项文本:星期m_ListData.SetItemText(0,2,strTime);     //时间m_ListData.SetItemText(0,3,TempmData1);m_ListData.SetItemText(0,4,TempmData2);m_ListData.SetItemText(0,5,TempmData3);m_ListData.SetItemText(0,6,TempmData4);m_ListData.SetItemText(0,7,TempmData5);CString strWarn;strWarn = m_ListData.GetItemText(0, 7);//获得子项文本:第一行第7个内容//AfxMessageBox(strWarn);GetDlgItem(IDC_EDIT_DATA5)->SetWindowText(_T(""));//清空备注UpdateData(FALSE);}

6.“完成”按钮:

void CTestListCtrlDlg::OnButtonOk()
{EnableWindowSet(FALSE);  //禁用右边按钮等控件
}

运行,点击“插入数据”按钮,右边控件启用,输入数据及备注,点击插入即可完成数据的插入:

注意:表头有复选框是因为初始化时,LVS_EX_CHECKBOXES 风格的作用:

m_ListData.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES  //复选框

7.增加“全选”,“反选”,“全不选”功能:
添加3个单选框radio,通过类向导为其添加点击事件:

“全选”:
void CTestListCtrlDlg::OnRADIO_AllSELECT()
{   for (int i=0;i<m_ListData.GetItemCount();i++){m_ListData.SetCheck(i,TRUE); //全部设置为选中状态m_ListData.SetItemState(i,LVIS_SELECTED, LVIS_SELECTED);}
}

“反选”

void CTestListCtrlDlg::OnRadio_Unselect()
{BOOL state;for (int i=0;i<m_ListData.GetItemCount();i++){state = m_ListData.GetCheck(i);//获取复选框的状态(打钩否)if (state == FALSE) //若未选中,则全选中{m_ListData.SetCheck(i,TRUE);//设置复选框的状态(打钩否)m_ListData.SetItemState(i,LVIS_SELECTED, LVIS_SELECTED);//设置某一行的状态(选中否)//GetItemState()获取某一行的状态(选中否) }else{m_ListData.SetItemState(i, ~LVIS_SELECTED, LVIS_SELECTED);m_ListData.SetCheck(i, FALSE);}}}

“全不选”

void CTestListCtrlDlg::OnRADIO_AllNOSELECT()
{for (int i=0;i<m_ListData.GetItemCount();i++){m_ListData.SetCheck(i,FALSE);m_ListData.SetItemState(i,LVIS_SELECTED, LVIS_SELECTED);}}

8.增加“删除选中”功能:

void CTestListCtrlDlg::OnButtonDeletedata()
{int nItem;POSITION pos;while (pos = m_ListData.GetFirstSelectedItemPosition()){ nItem = -1;nItem = m_ListData.GetNextSelectedItem(pos);if (nItem >= 0 && m_ListData.GetSelectedCount() > 0){m_ListData.DeleteItem(nItem);CString strNum1;strNum1.Format(_T("%d"),nItem+1);//  AfxMessageBox(strNum1);int i=m_ListData.GetSelectionMark();//获得选中行的行标//  m_ListData.SetSelectionMark(-1);//取消选中行CString strNum;strNum.Format(_T("%d"),i);GetDlgItem(IDC_EDIT_LINENUM)->SetWindowText(strNum) ;//m_List.GetItemState();//从后向前遍历数据,获取被选中行的行号iItem}}}

运行,插入数据:

点击“删除选中”

可同时删除多行:

点击“删除选中”:

结语:谢谢!

MFC之列表控件ListCtrl相关推荐

  1. MFC下列表控件的使用

    MFC下列表控件的使用 2012-11-09 16:46:57|  分类: 程序VC相关 |  标签: |字号大中小 订阅 1.应该加入头文件 #include <Atlbase.h> 2 ...

  2. Visual studio C++ MFC之列表控件CListCtrl Control

    背景 本篇旨在MSDN帮助文档下总结列表控件CListCtrl Control的使用,并列出碰到的具体问题. 正文 列表型控件List Control的类是ClistCtrl,具体成员对象详见链接,以 ...

  3. MFC 给列表控件发送左键单击、双击、以及右键单击消息

    void CTestsetting::SendClickToList() {NMITEMACTIVATE NMItemActive;NMHDR thdr;thdr.code = NM_CLICK; / ...

  4. 20200220 MFC之列表控件技术总结 CListCtrl (一)

    列表视图控件的创建 MFC为列表视图控件的操作提供了CListCtrl类. 如果我们不想在对话框模板中直接拖入List Control来使用列表视图控件,而是希望动态创建它,则要用到CListCtrl ...

  5. 列表控件ListCtrl的使用

    1.新建对话框工程Test,在对话框上放上ListCtrl控件IDC_LIST1,连接变量名m_list,增加代码: BOOL CTestDlg::OnInitDialog() { //        ...

  6. wxpython列表控件listctrl设置某行颜色_wxPython ListCtrl:写入彩色纹理

    在尝试将字符串写入listcrl时,我无法完全理解逻辑.这是正确的方法吗?在self.rightPanel = wx.ListCtrl(spliter, -1, style=wx.LC_REPORT) ...

  7. MFC 列表控件CListCtrl加载类似QQ界面的头像与文字

    本文主要讲述使用VS2012 MFC的CListCtrl(列表)控件加载类似于QQ界面的图片与文字数据.主要通过CListCtrl::InsertColumn.InsertItem.SetItemTe ...

  8. MFC列表控件ListControl和树控件TreeControl

    列表控件 列表相关的类:CListCtrl-父类是CWnd,本质是一个控件: CListView-父类是CView,本质是一个视图.相当于在视图中嵌入了一个CListCtrl控件 列表控件的使用 1. ...

  9. 设置ListCtrl列表控件其中某一行的字体和背景颜色

    设置ListCtrl列表控件其中某一行的字体和背景颜色,可以最终达到如下效果: 操作步骤如下所示: 1.先添加一个自定义消息 ON_NOTIFY ( NM_CUSTOMDRAW,IDC_V_H264_ ...

最新文章

  1. java中日期类型与字符串相互转换
  2. sklearn模型的训练(上)
  3. mac os 开启redis_mac os 命令行安装 启动和停止 redis
  4. 【3】数据筛选3 - BeautifulSoup4
  5. JDK = JRE + 编译器 + api + tools
  6. 打破信息茧房-我主动获取信息的方法 -#3
  7. 研究手机直播流媒体框架
  8. 如何使用python合并多个excel文件
  9. win10系统计算机如何分盘,win10怎么进行分盘_win10电脑如何合理分盘
  10. 开源云真机平台-Sonic应用实践
  11. 使用POI在Excel单元格插入符号(Symbol)
  12. VBA-获取指定行列最后一个非空单元格
  13. NUBT 1480 懒惰的风纪委Elaine
  14. 对网上一些Java笔试题的总结,答案与自我理解(400道)
  15. 混拨vps与单城市拨号vps有什么区别?
  16. 安全卸载Mac应用程序的方法,最后一种不会产生卸载残留
  17. 【爬虫】哔哩哔哩校园招聘信息
  18. D语言和Go语言有前途吗?
  19. Unity内IAP支付二次验证/服务器验证————最白话,手把手教你做系列。
  20. ArcGIS克里金插值ERROR999999解决办法汇总

热门文章

  1. “艺术类”员工管理的最佳方式
  2. 备战Noip2018模拟赛20 (A组) T1 Cz 礼物
  3. 题目2-1 where is the flag
  4. 免费分享!最新的大数据学习资料与电子书!!
  5. 借助 Windows 事件转发进行入侵检测
  6. 【Delphi】阿里车主服务 ECO API SDK D7 D2007 D2010 XE2 XE7 XE8 XE10跨平台
  7. 豆瓣搜索—微信公共平台接入(wechatpy)
  8. IAR报错:Error[e27]: Entry “XXXX“ in module 头文件名1 redefined in module 头文件名2
  9. 无名杀武将设计流分享
  10. 实例分割:Mask RCNN