欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年CListCtrl使用技巧大全 .pdf

    • 资源ID:32498289       资源大小:172.80KB        全文页数:18页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年CListCtrl使用技巧大全 .pdf

    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 的行列号 . 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 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 只能显示259 个字符的问题 . 15 31. 响应在 listctrl 的 column header 上的鼠标右键单击 . 15 32. 类似于 windows 资源管理器的listview . 16 33. 在 ListCtrl 中 OnTimer 只响应两次的问题 . 16 34. 以下为一些为实现各种自定义功能的listctrl 派生类 . 16 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 18 页 - - - - - - - - - 以下未经说明, listctrl默认 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_TYPEMASK; /清除显示方式位 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_CHECKBOXES;/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, 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.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) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 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 (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 lvinfo; 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); AfxMessageBox(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 消息相应函数 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); /判断是否点在 checkbox 上 if(nFlag = LVHT_ONITEMSTATEICON) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 18 页 - - - - - - - - - AfxMessageBox(点在 listctrl的 checkbox 上); *pResult = 0; 15. 右键点击 listctrl的 item 弹出菜单添加 listctrl控件的 NM_RCLICK 消息相应函数 void CTest6Dlg:OnRclickList1(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 ); popup-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; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 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,pNMListView-iItem); else if(pNMListView-uOldState & LVIS_FOCUSED) = 0 & (pNMListView-uNewState & LVIS_FOCUSED) = LVIS_FOCUSED) sTemp.Format(%d got focus,pNMListView-iItem); if(pNMListView-uOldState & LVIS_SELECTED) = LVIS_SELECTED & (pNMListView-uNewState & LVIS_SELECTED) = 0) sTemp.Format(%d losted selected,pNMListView-iItem); else if(pNMListView-uOldState & LVIS_SELECTED) = 0 & (pNMListView-uNewState & LVIS_SELECTED) = LVIS_SELECTED) sTemp.Format(%d got selected,pNMListView-iItem); *pResult = 0; 17. 得到另一个进程里的listctrl控件的 item内容http:/ - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 18 页 - - - - - - - - - 18. 选中 listview中的 item Q131284: How To Select a Listview Item Programmatically http:/ 如何在 CListView中使用 CListCtrl 的派生类http:/ listctrl的 subitem添加图标 m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES); m_list.SetItem(.); /具体参数请参考 msdn 21. 在 CListCtrl显示文件,并根据文件类型来显示图标网上找到的代码, share BOOL CTest6Dlg:OnInitDialog() CDialog:OnInitDialog(); HIMAGELIST himlSmall; HIMAGELIST himlLarge; SHFILEINFO sfi; char cSysDirMAX_PATH; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 18 页 - - - - - - - - - CString strBuf; memset(cSysDir, 0, MAX_PATH); GetWindowsDirectory(cSysDir, MAX_PATH); strBuf = cSysDir; sprintf(cSysDir, %s, strBuf.Left(strBuf.Find()+1); himlSmall = (HIMAGELIST)SHGetFileInfo (LPCSTR)cSysDir, 0, &sfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON ); himlLarge = (HIMAGELIST)SHGetFileInfo(LPCSTR)cSysDir, 0, &sfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_LARGEICON); if (himlSmall & himlLarge) :SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST, (WPARAM)LVSIL_SMALL, (LPARAM)himlSmall); :SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST, (WPARAM)LVSIL_NORMAL, (LPARAM)himlLarge); return TRUE; / return TRUE unless you set the focus to a control void CTest6Dlg:AddFiles(LPCTSTR lpszFileName, BOOL bAddToDocument) int nIcon = GetIconIndex(lpszFileName, FALSE, FALSE); CString strSize; CFileFind filefind; / get file size if (filefind.FindFile(lpszFileName) filefind.FindNextFile(); strSize.Format(%d, filefind.GetLength(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 18 页 - - - - - - - - - else strSize = 0; / split path and filename CString strFileName = lpszFileName; CString strPath; int nPos = strFileName.ReverseFind(); if (nPos != -1) strPath = strFileName.Left(nPos); strFileName = strFileName.Mid(nPos + 1); / insert to list int nItem = m_list.GetItemCount(); m_list.InsertItem(nItem, strFileName, nIcon); m_list.SetItemText(nItem, 1, strSize); m_list.SetItemText(nItem, 2, strFileName.Right(3); m_list.SetItemText(nItem, 3, strPath); int CTest6Dlg:GetIconIndex(LPCTSTR lpszPath, BOOL bIsDir, BOOL bSelected) SHFILEINFO sfi; memset(&sfi, 0, sizeof(sfi); if (bIsDir) SHGetFileInfo(lpszPath, FILE_ATTRIBUTE_DIRECTORY, &sfi, sizeof(sfi), SHGFI_SMALLICON | SHGFI_SYSICONINDEX | SHGFI_USEFILEATTRIBUTES |(bSelected ? SHGFI_OPENICON : 0); return sfi.iIcon; else SHGetFileInfo (lpszPath, FILE_ATTRIBUTE_NORMAL, &sfi, 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 18 页 - - - - - - - - - sizeof(sfi), SHGFI_SMALLICON | SHGFI_SYSICONINDEX | SHGFI_USEFILEATTRIBUTES | (bSelected ? SHGFI_OPENICON : 0); return sfi.iIcon; return -1; 22. listctrl 内容进行大数据量更新时,避免闪烁 m_list.SetRedraw(FALSE); /更新内容 m_list.SetRedraw(TRUE); m_list.Invalidate(); m_list.UpdateWindow(); 或者参考http:/ listctrl排序Q250614 :How To Sort Items in a CListCtrl in Report View http:/ - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 18 页 - - - - - - - - - 24. 在 listctrl中选中某个 item 时动态改变其icon或 bitmap Q141834: How to change the icon or the bitmap of a CListCtrlitem in Visual C+ http:/ 在添加 item 后,再 InsertColumn() 后导致整列数据移动的问题Q151897: CListCtrl:InsertColumn() Causes Column Data to Shift http:/ 关于 listctrl第一列始终居左的问题解决办法:把第一列当一个虚列, 从第二列开始插入列及数据, 最后删除第一列。具体解释参阅http:/ 锁定 column header的拖动http:/ - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 18 页 - - - - - - - - - 28. 如何隐藏 clistctrl的列把需隐藏的列的宽度设为0, 然后检测当该列为隐藏列时,用上面第 27 点的锁定 column 的拖动来实现29. listctrl进行大数据量操作时, 使用 virtual list http:/ 关于 item 只能显示 259 个字符的问题解决办法:需要在item 上放一个 edit 。31. 响应在 listctrl的 column header 上的鼠标右键单击Q125694: How To Find Out Which Listview Column Was Right-Clicked http:/ - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 18 页 - - - - - - - - - 32. 类似于 windows 资源管理器的listview Q234310: How to implement a ListView control that is similar to Windows Explorer by using DirLV.exe http:/ 在 ListCtrl中 OnTimer只响应两次的问题Q200054 :PRB: OnTimer() Is Not Called Repeatedly for a List Control http:/ 以下为一些为实现各种自定义功能的listctrl派生类 (1) 拖放http:/ CListCtrl和 CTreeCtrl 间拖放http:/ (2) 多功能 listctrl支持 subitem 可编辑,图标, radiobutton,checkbox,字符串改变颜色的类http:/ subitem 可编辑, subitem 图标,subitem 改变颜色的类http:/ - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 18 页 - - - - - - - - - (3) subitem 中显示超链接http:/ (4) subitem 的 tooltip提示http:/ (5) subitem 中显示进度条http:/ (6) 动态改变 subitem 的颜色和背景色http:/ (7) 类 vb 属性对话框http:/ (8) 选中 subitem( 只高亮选中的 item)http:/ (9) 改变行高http:/ (10) 改变行颜色http:/ (11) 可编辑 subitem 的 listctrlhttp:/ - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 18 页 - - - - - - - - - http:/ (12) subitem 可编辑,插入 combobox ,改变行颜色, subitem 的tooltip提示http:/ (13) header 中允许多行字符串http:/ (14) 插入 comboboxhttp:/ (15) 添加背景图片http:/ (16) 自适应宽度的 listctrlhttp:/ (17) 改变 ListCtrl高亮时的颜色 ( 默认为蓝色 )处理 NM_CUSTOMDRAW http:/ - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 18 页 - - - - - - - - -

    注意事项

    本文(2022年CListCtrl使用技巧大全 .pdf)为本站会员(C****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开