2022年CListCtrl使用技巧大全 .pdf
《2022年CListCtrl使用技巧大全 .pdf》由会员分享,可在线阅读,更多相关《2022年CListCtrl使用技巧大全 .pdf(18页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、CListCtrl使用技巧1. CListCtrl 风格 . 22. 设置 listctrl 风格及扩展风格. 23. 插入数据 . 34. 一直选中 item . 35. 选中和取消选中一行. 36. 得到 listctrl 中所有行的checkbox 的状态 . 37. 得到 listctrl 中所有选中行的序号. 48. 得到 item 的信息 . 49. 得到 listctrl 的所有列的header 字符串内容 . 510. 使 listctrl 中一项可见,即滚动滚动条. 511. 得到 listctrl 列数 . 612. 删除所有列 . 613. 得到单击的listctrl 的
2、行列号 . 614. 判断是否点击在listctrl 的 checkbox 上 . 715. 右键点击listctrl 的 item 弹出菜单 . 816. item 切换焦点时 (包括用键盘和鼠标切换item 时),状态的一些变化顺序. 817. 得到另一个进程里的listctrl 控件的 item 内容 . 918. 选中 listview 中的 item . 10 19. 如何在 CListView 中使用 CListCtrl的派生类 . 10 20. listctrl 的 subitem 添加图标 . 10 21. 在 CListCtrl 显示文件,并根据文件类型来显示图标 . 10
3、22. listctrl 内容进行大数据量更新时,避免闪烁. 13 23. listctrl 排序 . 13 24. 在 listctrl 中选中某个item 时动态改变其icon 或 bitmap . 14 25. 在添加 item 后,再 InsertColumn() 后导致整列数据移动的问题 . 14 26. 关于 listctrl 第一列始终居左的问题. 14 27. 锁定 column header 的拖动 . 14 28. 如何隐藏clistctrl 的列 . 15 29. listctrl 进行大数据量操作时,使用virtual list . 15 30. 关于 item 只能显
4、示259 个字符的问题 . 15 31. 响应在 listctrl 的 column header 上的鼠标右键单击 . 15 32. 类似于 windows 资源管理器的listview . 16 33. 在 ListCtrl 中 OnTimer 只响应两次的问题 . 16 34. 以下为一些为实现各种自定义功能的listctrl 派生类 . 16 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 18 页 - - - - - - - - - 以下未经说明, listct
5、rl默认 view 风格为 report 1. CListCtrl 风格 LVS_ICON: 为每个 item 显示大图标 LVS_SMALLICON: 为每个 item 显示小图标 LVS_LIST: 显示一列带有小图标的item LVS_REPORT: 显示 item 详细资料直观的理解:windows资源管理器,“查看”标签下的“大图标, 小图标,列表,详细资料”2. 设置 listctrl 风格及扩展风格 LONG lStyle; lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);/获取当前窗口style lStyle &= LVS_TY
6、PEMASK; /清除显示方式位 lStyle |= LVS_REPORT; /设置 style SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);/设置 style DWORD dwStyle = m_list.GetExtendedStyle(); dwStyle |= LVS_EX_FULLROWSELECT;/选中某行使整行高亮(只适用与report风格的 listctrl) dwStyle |= LVS_EX_GRIDLINES;/网格线(只适用与report风格的listctrl) dwStyle |= LVS_EX_CHECKBOXE
7、S;/item前生成 checkbox 控件 m_list.SetExtendedStyle(dwStyle); /设置扩展 风格注:listview的 style请查阅 msdn http:/ - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 18 页 - - - - - - - - - 3. 插入数据 m_list.InsertColumn( 0, ID, LVCFMT_LEFT, 40 );/插入列 m_list.InsertColumn( 1, NAME, LVCFMT_LEFT
8、, 50 ); int nRow = m_list.InsertItem(0, “11”);/插入行m_list.SetItemText(nRow, 1, “jacky ”);/设置数据4. 一直选中 item 选中 style中的 Show selection always,或者在上面第2 点中设置LVS_SHOWSELALWAYS 5. 选中和取消选中一行 int nIndex = 0; /选中 m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED); /取消选中 m_list.
9、SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED); 6. 得到 listctrl中所有行的checkbox的状态 m_list.SetExtendedStyle(LVS_EX_CHECKBOXES); CString str; for(int i=0; im_list.GetItemCount(); i+) if( m_list.GetItemState(i, LVIS_SELECTED) = LVIS_SELECTED | m_list.GetCheck(i) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
10、- - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 18 页 - - - - - - - - - str.Format(_T(第%d行的 checkbox 为选中状态 ), i); AfxMessageBox(str); 7. 得到 listctrl中所有选中行的序号方法一: CString str; for(int i=0; iGetItemCount(); 12. 删除所有列方法一: while ( m_list.DeleteColumn (0) 因为你删除了第一列后,后面的列会依次向上移动。方法二: int nColumns = 4; for (
11、int i=nColumns-1; i=0; i) m_list.DeleteColumn (i); 13. 得到单击的listctrl的行列号添加 listctrl控件的 NM_CLICK 消息相应函数 void CTest6Dlg:OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) / 方法一: /* DWORD dwPos = GetMessagePos(); CPoint point( LOWORD(dwPos), HIWORD(dwPos) ); m_list.ScreenToClient(&point); LVHITTESTINFO lvin
12、fo; lvinfo.pt = point; lvinfo.flags = LVHT_ABOVE; int nItem = m_list.SubItemHitTest(&lvinfo); if(nItem != -1) CString strtemp; strtemp.Format(单击的是第 %d行第%d列, lvinfo.iItem, 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 18 页 - - - - - - - - - lvinfo.iSubItem); Af
13、xMessageBox(strtemp); */ / 方法二 : /* NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(pNMListView-iItem != -1) CString strtemp; strtemp.Format(单击的是第 %d行第%d列, pNMListView-iItem, pNMListView-iSubItem); AfxMessageBox(strtemp); */ *pResult = 0; 14. 判断是否点击在listctrl的 checkbox上添加 listctrl控件的 NM_CLICK 消息相
14、应函数 void CTest6Dlg:OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) DWORD dwPos = GetMessagePos(); CPoint point( LOWORD(dwPos), HIWORD(dwPos) ); m_list.ScreenToClient(&point); LVHITTESTINFO lvinfo; lvinfo.pt = point; lvinfo.flags = LVHT_ABOVE; UINT nFlag; int nItem = m_list.HitTest(point, &nFlag); /判断是
15、否点在 checkbox 上 if(nFlag = LVHT_ONITEMSTATEICON) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 18 页 - - - - - - - - - AfxMessageBox(点在 listctrl的 checkbox 上); *pResult = 0; 15. 右键点击 listctrl的 item 弹出菜单添加 listctrl控件的 NM_RCLICK 消息相应函数 void CTest6Dlg:OnRclickList1(
16、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_MENU1 ) ); CMenu* popup = menu.GetSubMenu(0); ASSERT( popup != NULL ); pop
17、up-TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this ); *pResult = 0; 16. item 切换焦点时 (包括用键盘和鼠标切换 item 时),状态的一些变化顺序添加 listctrl控件的 LVN_ITEMCHANGED消息相应函数 void CTest6Dlg:OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult) NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; 名师资料总结 - - -
18、精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 18 页 - - - - - - - - - / TODO: Add your control notification handler code here CString sTemp; if(pNMListView-uOldState & LVIS_FOCUSED) = LVIS_FOCUSED & (pNMListView-uNewState & LVIS_FOCUSED) = 0) sTemp.Format(%d losted focus,p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年CListCtrl使用技巧大全 2022 CListCtrl 使用 技巧 大全
限制150内