1. 以下未经说明,listctrl默认view风格为report
  2. -------------------------------------------------------------------------------
  3. . CListCtrl 风格
  4. LVS_ICON: 为每个item显示大图标
  5. LVS_SMALLICON: 为每个item显示小图标
  6. LVS_LIST: 显示一列带有小图标的item
  7. LVS_REPORT: 显示item详细资料
  8. 直观的理解:windows资源管理器,"查看"标签下的"大图标,小图标,列表,详细资料
  9. --------------------------------------------------------------------------------
  10. . 设置listctrl风格及扩展风格
  11. LONG lStyle;
  12. lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口style
  13. lStyle &= ~LVS_TYPEMASK; //清除显示方式位
  14. lStyle |= LVS_REPORT; //设置style
  15. SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置style
  16. DWORD dwStyle = m_list.GetExtendedStyle();
  17. dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
  18. dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
  19. dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件
  20. m_list.SetExtendedStyle(dwStyle); //设置扩展风格
  21. 注:listview的style请查阅msdn
  22. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrflistviewstyles.asp
  23. --------------------------------------------------------------------------------
  24. . 插入数据
  25. m_list.InsertColumn( , );//插入列
  26. m_list.InsertColumn( , );
  27.  
  28. //新插入的在上面
  29. , ");// 插入行
  30. m_list.SetItemText(nRow, , "jacky");//设置其它列数据
  31.  
  32. //新插入的数据在下面
  33.  
  34. int nIndex = m_list.GetItemCount();
  35. LV_ITEM lvItem;
  36. lvItem.mask = LVIF_TEXT ;
  37. lvItem.iItem = nIndex; //行数
  38. lvItem.iSubItem = ;
  39. lvItem.pszText = (char*)(LPCTSTR)strCount; //第一列
  40. //在最后一行插入记录值.
  41. m_list.InsertItem(&lvItem);
  42. //插入其它列
  43. m_list.SetItemText(nIndex,,strLat);
  44. --------------------------------------------------------------------------------
  45. . 一直选中item
  46. 选中style中的Show selection always,或者在上面第2点中设置LVS_SHOWSELALWAYS
  47. --------------------------------------------------------------------------------
  48. . 选中和取消选中一行
  49. ;
  50. //选中
  51. m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
  52. //取消选中
  53. m_list.SetItemState(nIndex, , LVIS_SELECTED|LVIS_FOCUSED);
  54. --------------------------------------------------------------------------------
  55. . 得到listctrl中所有行的checkbox的状态
  56. m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);
  57. CString str;
  58. ; i<m_list.GetItemCount(); i++)
  59. {
  60. if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))
  61. {
  62. str.Format(_T("第%d行的checkbox为选中状态"), i);
  63. AfxMessageBox(str);
  64. }
  65. }
  66. --------------------------------------------------------------------------------
  67. . 得到listctrl中所有选中行的序号
  68. 方法一:
  69. CString str;
  70. ; i<m_list.GetItemCount(); i++)
  71. {
  72. if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
  73. {
  74. str.Format(_T("选中了第%d行"), i);
  75. AfxMessageBox(str);
  76. }
  77. }
  78. 方法二:
  79. POSITION pos = m_list.GetFirstSelectedItemPosition();
  80. if (pos == NULL)
  81. TRACE0("No items were selected!\n");
  82. Else
  83. {
  84. while (pos)
  85. {
  86. int nItem = m_list.GetNextSelectedItem(pos);
  87. TRACE1("Item %d was selected!\n", nItem);
  88. // you could do your own processing on nItem here
  89. }
  90. }
  91. --------------------------------------------------------------------------------
  92. . 得到item的信息
  93. TCHAR szBuf[];
  94. LVITEM lvi;
  95. lvi.iItem = nItemIndex;
  96. lvi.iSubItem = ;
  97. lvi.mask = LVIF_TEXT;
  98. lvi.pszText = szBuf;
  99. lvi.cchTextMax = ;
  100. m_list.GetItem(&lvi);
  101. 关于得到设置item的状态,还可以参考msdn文章
  102. Q173242: Use Masks to Set/Get Item States in ClistCtrl
  103. http://support.microsoft.com/kb/173242/en-us
  104. --------------------------------------------------------------------------------
  105. . 得到listctrl的所有列的header字符串内容
  106. LVCOLUMN lvcol;
  107. ];
  108. int nColNum;
  109. CString strColumnName[];//假如有4列
  110. nColNum = ;
  111. lvcol.mask = LVCF_TEXT;
  112. lvcol.pszText = str;
  113. lvcol.cchTextMax = ;
  114. while(m_list.GetColumn(nColNum, &lvcol))
  115. {
  116. strColumnName[nColNum] = lvcol.pszText;
  117. nColNum++;
  118. }
  119. --------------------------------------------------------------------------------
  120. . 使listctrl中一项可见,即滚动滚动条
  121. m_list.EnsureVisible(i, FALSE);
  122. --------------------------------------------------------------------------------
  123. . 得到listctrl列数
  124. int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();
  125. --------------------------------------------------------------------------------
  126. . 删除所有列
  127. 方法一:
  128. ))
  129. 因为你删除了第一列后,后面的列会依次向上移动。
  130. 方法二:
  131. ;
  132. ; i>=; i--)
  133. m_list.DeleteColumn (i);
  134. --------------------------------------------------------------------------------
  135. . 得到单击的listctrl的行列号
  136. 添加listctrl控件的NM_CLICK消息相应函数
  137. void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
  138. {
  139. // 方法一:
  140. /*
  141. DWORD dwPos = GetMessagePos();
  142. CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
  143. m_list.ScreenToClient(&point);
  144. LVHITTESTINFO lvinfo;
  145. lvinfo.pt = point;
  146. lvinfo.flags = LVHT_ABOVE;
  147. int nItem = m_list.SubItemHitTest(&lvinfo);
  148. if(nItem != -1)
  149. {
  150. CString strtemp;
  151. strtemp.Format("单击的是第%d行第%d列", lvinfo.iItem, lvinfo.iSubItem);
  152. AfxMessageBox(strtemp);
  153. }
  154. */
  155. // 方法二:
  156. /*
  157. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  158. if(pNMListView->iItem != -1)
  159. {
  160. CString strtemp;
  161. strtemp.Format("单击的是第%d行第%d列",
  162. pNMListView->iItem, pNMListView->iSubItem);
  163. AfxMessageBox(strtemp);
  164. }
  165. */
  166. *pResult = ;
  167. }
  168. --------------------------------------------------------------------------------
  169. . 判断是否点击在listctrlcheckbox
  170. 添加listctrl控件的NM_CLICK消息相应函数
  171. void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
  172. {
  173. DWORD dwPos = GetMessagePos();
  174. CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
  175. m_list.ScreenToClient(&point);
  176. LVHITTESTINFO lvinfo;
  177. lvinfo.pt = point;
  178. lvinfo.flags = LVHT_ABOVE;
  179. UINT nFlag;
  180. int nItem = m_list.HitTest(point, &nFlag);
  181. //判断是否点在checkbox上
  182. if(nFlag == LVHT_ONITEMSTATEICON)
  183. {
  184. AfxMessageBox("点在listctrl的checkbox上");
  185. }
  186. *pResult = ;
  187. }
  188. --------------------------------------------------------------------------------
  189. . 右键点击listctrlitem弹出菜单
  190. 添加listctrl控件的NM_RCLICK消息相应函数
  191. void CTest6Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
  192. {
  193. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  194. )
  195. {
  196. DWORD dwPos = GetMessagePos();
  197. CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
  198. CMenu menu;
  199. VERIFY( menu.LoadMenu( IDR_MENU1 ) );
  200. CMenu* popup = menu.GetSubMenu();
  201. ASSERT( popup != NULL );
  202. popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );
  203. }
  204. *pResult = ;
  205. }
  206.  
  207. . item切换焦点时(包括用键盘和鼠标切换item时),状态的一些变化顺序
  208. 添加listctrl控件的LVN_ITEMCHANGED消息相应函数
  209. void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)
  210. {
  211. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  212. // TODO: Add your control notification handler code here
  213. CString sTemp;
  214. )
  215. {
  216. sTemp.Format("%d losted focus",pNMListView->iItem);
  217. }
  218. &&
  219. (pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED)
  220. {
  221. sTemp.Format("%d got focus",pNMListView->iItem);
  222. }
  223. if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&
  224. (pNMListView->uNewState & LVIS_SELECTED) == )
  225. {
  226. sTemp.Format("%d losted selected",pNMListView->iItem);
  227. }
  228. && (pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)
  229. {
  230. sTemp.Format("%d got selected",pNMListView->iItem);
  231. }
  232. *pResult = ;
  233. --------------------------------------------------------------------------------
  234. . 得到另一个进程里的listctrl控件的item内容
  235. http://www.codeproject.com/threads/int64_memsteal.asp
  236.  
  237. --------------------------------------------------------------------------------
  238. . 选中listview中的item
  239. Q131284: How To Select a Listview Item Programmatically
  240. http://support.microsoft.com/kb/131284/en-us
  241.  
  242. --------------------------------------------------------------------------------
  243. . 如何在CListView中使用CListCtrl的派生类
  244. http://www.codeguru.com/cpp/controls/listview/introduction/article.php/c919/
  245.  
  246. --------------------------------------------------------------------------------
  247. . listctrlsubitem添加图标
  248. m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);
  249. m_list.SetItem(..); //具体参数请参考msdn
  250.  
  251. }
  252.  
  253. str.Format("你双击了:%d行,%d列",pList->iItem,pList->iSubItem);
  254. MessageBox(str);
  255.  
  256. *pResult = ;
  257. }
  258.  
  259. 常用操作:
  260. 、添加列标题头:InsertColumn
  261. 、获取与设置列宽:GetColumnWidthSetColumnWidth
  262. 、添加一行:InsertItemSetItemText
  263. 、获取与设置单元文本:GetItemTextSetItemText
  264. 、允许多行选中时,获取选中的行数:GetSelectedCount
  265. 、单行选中时,获取选中的行:GetSelectionMark
  266. 、选中某行:SetItemState(n, LVIS_SELECTED, LVIS_SELECTED);取消选中的行SetItemState(n,,-);使用此函数前需要先调用SetFocus();
  267. 、获取某行的状态是否为选中:GetItemState(n, LVIS_SELECTED) == LVIS_SELECTED
  268. 、删除所有行:DeleteAllItems
  269. 、删除指定列:DeleteColumn
  270. 、删除指定行:DeleteItem
  271. 、获取与设置列表控件的背景色:GetBkColorSetBkColor
  272. 、获取与设置文字背景色:GetTextBkColorSetTextBkColor
  273. 、获取与设置文字前景色:GetTextColorSetTextColor
  274. 、获取与设置CheckGetCheckSetCheck,使用前需要设置控件属性SetExtendedStyle(LVS_EX_CHECKBOXES);使控件有勾选功能
  275. 、获取与设置图标列表:GetImageListSetImageList
  276. 、获取与设置行附加数据:GetItemDataSetItemData
  277. 、获取与设置扩展风格样式:GetExtendedStyleSetExtendedStyle
  278. 、设置正行选中与网格线:SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
  279. 、让ListCtrl支持编辑的功能:
  280. ①、将属性中的 Edit Labels 设置为 True
  281. ②、响应控件的 LVN_EDNLABELEDIT 消息,添加如下代码:
  282. CString strText;
  283. m_ListCtrl.GetEditControl()->GetWindowText(strText);
  284. m_ListCtrl.SetItemText(pDispInfo->item.iItem, pDispInfo->item.iSubItem, strText);
  285.  
  286. 、多行可选时,跳到第一个被选中的行,即使第一个被选中的行可视。
  287.  
  288. POSITION pos = pView->GetListCtrl().GetFirstSelectedItemPosition();
  289. int nFirstSel = pView->GetListCtrl().GetNextSelectedItem(pos);
  290. )
  291. {
  292. pView->GetListCtrl().EnsureVisible(nFirstSel,FALSE);
  293. }
  294.  
  295. 列表中添加图标代码:
  296.  
  297. UINT nIconID[] = {IDI_ICON1,IDI_ICON2,IDI_ICON3,IDI_ICON4,IDI_ICON5};//图标ID
  298. m_ImageList.Create(,,ILC_COLOR24,);//初始化CImageList类,sizeof(nIconID)/sizeof(UINT)为图标个数,后面的0表示CImageList在sizeof(nIconID)/sizeof(UINT)个图标个数的基础上可再添加多少个图标。
  299. m_ImageList.SetBkColor(RGB(,,));//设置背景色为白色
  300. ; i < sizeof(nIconID)/sizeof(UINT); i++)
  301. {
  302. m_ImageList.Add(AfxGetApp()->LoadIcon(nIconID[i]));//将图标添加到CImageList
  303. }
  304. m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);//设置列表控件显示图标
  305.  
  306. m_ListCtrl.InsertColumn(,_T(,);
  307. m_ListCtrl.InsertColumn(,_T(,);
  308. m_ListCtrl.InsertColumn(,_T(,);
  309. m_ListCtrl.InsertItem(,_T();//后面的0表示添加CImageList中的第0个图标
  310. m_ListCtrl.InsertItem(,_T();//后面的1表示添加CImageList中的第1个图标
  311. m_ListCtrl.InsertItem(,_T();
  312. m_ListCtrl.SetItemText(,,_T("));
  313. m_ListCtrl.SetExtendedStyle(LVS_EX_CHECKBOXES);//设置控件有勾选功能
  314. DWORD dwStyle = m_ListCtrl.GetExtendedStyle();
  315. m_ListCtrl.SetExtendedStyle(dwStyle|LVS_EX_FULLROWSELECT);设置控件选中行的功能

LISTCTRL控件方法的更多相关文章

  1. VC/MFC ListCtrl 控件功能使用汇总(转)

    以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...

  2. ListCtrl控件

    一 CListCtrl类型 LVS_EDITLABELS LVS_OWNERDRAWFIXED LVS_REPORT LVS_SHOWSELALWAYS LVS_SINGLESEL LVS_SMALL ...

  3. ListCtrl控件的使用

    list contrl控件的使用 .建立基于对话框的应用程序,布置界面,设置属性. 注意添加的是listctrl控件,不是listbox控件,在控件工具箱的倒数第五行list control控件. 属 ...

  4. duilib中ListCtrl控件的实现

    转载请说明出处,谢谢~~ 昨天在编程群里聊天,提到了ListCtrl,然后有网友找我,他需要做一个ListCtrl控件,我看过需求后接下了这个活.今天就把大致的思路和过程记录一下.首先看<任务书 ...

  5. ListCtrl控件着色

    最近在写一款山寨的反病毒软件,大致功能已经实现,还有一些细小的环节需要细化. 其中,在界面编程中,就用到了给ListCtrl控件着色,查看了网上一些文章,终于实现了. 其实说白了,原理很简单,就是Li ...

  6. 使用CSV控件方法实现参数化

    一.录制脚本 二.下面介绍如何使用CSV控件方法实现参数化 1.  添加-->配置元件-->csv Data Set Config Filename:文件的来源 Variable Name ...

  7. JQuery自定义用户控件方法汇总

    首先必用 JQuery.fn.extend方法 使用方法: jQuery.fn.extend({}); 其次 相应控件配置参数设置: jQuery.fn.extend({ uploadPreview: ...

  8. Auto.js 特殊定位控件方法 不能在ui线程执行阻塞操作,请使用setTimeout代替

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! Auto.js 特殊定位控件方法 操作环 ...

  9. bcb安装控件方法汇总

    1.BCB 菜单: Project->Options->Packages->Add[喝小酒的网摘]http://blog.const.net.cn/a/8496.htm如果是BCB6 ...

随机推荐

  1. ucenter单点登录

    首先我们先来了解下Ucenter登录步骤 1.用户登录discuz,通过logging.php文件中的函数uc_user_login对post过来的数据进行验证,也就是对username和passwo ...

  2. Asp.NetCore之组件写法

    本章内容和大家分享的是Asp.NetCore组件写法,在netcore中很多东西都以提供组件的方式来使用,比如MVC架构,Session,Cache,数据库引用等: 这里我也通过调用验证码接口来自定义 ...

  3. BootstrapBootbox居中

    /* 模态框居中样式 */ .bootbox-container { position: fixed; ; ; ; ; ; overflow-y: auto; } .bootbox-container ...

  4. JAVA 发送邮件代码---发送HTML内容

    依赖包:mail.jar JAR链接地址: http://pan.baidu.com/s/1o8LNl0Y 密码: ja52 package com.dava; import java.util.Pr ...

  5. 关于html5调用手机相机(原创)

    很久没写随笔了 从ios6开始,webview支持html <input type="file">标签,用来调取手机的相册和相机,但是没有权限提示,不知道是不是我写的有 ...

  6. 性能优化之AJAX

    明天就放假啦~哈哈.四月份好像还没有输出呢,吓得我赶紧写点东西... Ajax是高性能JavaScript的基础. Ajax,从最基本的层面来说,是一种与服务器通信而无需重载页面的方法.数据可以从服务 ...

  7. 在Caffe中实现模型融合

    模型融合 有的时候我们手头可能有了若干个已经训练好的模型,这些模型可能是同样的结构,也可能是不同的结构,训练模型的数据可能是同一批,也可能不同.无论是出于要通过ensemble提升性能的目的,还是要设 ...

  8. python类与对象基本语法

    面向对象编程的2个非常重要的概念:类和对象. 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 类就相当于制造飞机时的图纸,用它 ...

  9. Twitter数据抓取的方法(二)

    Scraping Tweets Directly from Twitters Search Page – Part 2 Published January 11, 2015 In the previo ...

  10. MySQL最常用分组聚合函数

    一.聚合函数(aggregation function)---也就是组函数 在一个行的集合(一组行)上进行操作,对每个组给一个结果. 常用的组函数: AVG([distinct] expr) 求平均值 ...