`

listctrl总结2

    博客分类:
  • MFC
阅读更多

20. 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  cSysDir[MAX_PATH];
           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());
           }
           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, 
                         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://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.setredraw.asp



23. listctrl排序

Q250614:How To Sort Items in a CListCtrl in Report View
http://support.microsoft.com/kb/250614/en-us



24. 在listctrl中选中某个item时动态改变其icon或bitmap

Q141834: How to change the icon or the bitmap of a CListCtrl item in Visual C
http://support.microsoft.com/kb/141834/en-us


25. 在添加item后,再InsertColumn()后导致整列数据移动的问题

Q151897: CListCtrl::InsertColumn() Causes Column Data to Shift
http://support.microsoft.com/kb/151897/en-us



26. 关于listctrl第一列始终居左的问题

解决办法:把第一列当一个虚列,从第二列开始插入列及数据,最后删除第一列。
     
具体解释参阅   http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/structures/lvcolumn.asp

 


27. 锁定column header的拖动

http://msdn.microsoft.com/msdnmag/issues/03/06/CQA/



28. 如何隐藏clistctrl的列

    把需隐藏的列的宽度设为0,然后检测当该列为隐藏列时,用上面第27点的锁定column 的拖动来实现


29. listctrl进行大数据量操作时,使用virtual list   

http://www.microsoft.com/msj/archive/S2061.aspx
http://www.codeguru.com/cpp/controls/listview/advanced/article.php/c4151/
http://www.codeproject.com/listctrl/virtuallist.asp



30. 关于item只能显示259个字符的问题

解决办法:需要在item上放一个edit。

 


31. 响应在listctrl的column header上的鼠标右键单击

Q125694: How To Find Out Which Listview Column Was Right-Clicked
http://support.microsoft.com/kb/125694/en-us



32. 类似于windows资源管理器的listview

Q234310: How to implement a ListView control that is similar to Windows Explorer by using DirLV.exe
http://support.microsoft.com/kb/234310/en-us

 


33. 在ListCtrl中OnTimer只响应两次的问题

Q200054:
PRB: OnTimer() Is Not Called Repeatedly for a List Control
http://support.microsoft.com/kb/200054/en-us


34. 以下为一些为实现各种自定义功能的listctrl派生类

          (1)    拖放       
                   http://www.codeproject.com/listctrl/dragtest.asp

                   在CListCtrl和CTreeCtrl间拖放
                   http://support.microsoft.com/kb/148738/en-us
 
          (2)    多功能listctrl
                   支持subitem可编辑,图标,radiobutton,checkbox,字符串改变颜色的类
                   http://www.codeproject.com/listctrl/quicklist.asp
 
                   支持排序,subitem可编辑,subitem图标,subitem改变颜色的类
                   http://www.codeproject.com/listctrl/ReportControl.asp

          (3)    subitem中显示超链接
                   http://www.codeproject.com/listctrl/CListCtrlLink.asp

          (4)    subitem的tooltip提示
                   http://www.codeproject.com/listctrl/ctooltiplistctrl.asp

          (5)    subitem中显示进度条   
                   http://www.codeproject.com/listctrl/ProgressListControl.asp
                   http://www.codeproject.com/listctrl/napster.asp
                   http://www.codeguru.com/Cpp/controls/listview/article.php/c4187/

          (6)    动态改变subitem的颜色和背景色
                    http://www.codeproject.com/listctrl/highlightlistctrl.asp
                    http://www.codeguru.com/Cpp/controls/listbox/colorlistboxes/article.php/c4757/
 
          (7)    类vb属性对话框
                    http://www.codeproject.com/listctrl/propertylistctrl.asp
                    http://www.codeguru.com/Cpp/controls/listview/propertylists/article.php/c995/
                    http://www.codeguru.com/Cpp/controls/listview/propertylists/article.php/c1041/
 
          (8)    选中subitem(只高亮选中的item)
                    http://www.codeproject.com/listctrl/SubItemSel.asp
                    http://www.codeproject.com/listctrl/ListSubItSel.asp
 
          (9)    改变行高
                    http://www.codeproject.com/listctrl/changerowheight.asp
 
          (10)   改变行颜色
                    http://www.codeproject.com/listctrl/coloredlistctrl.asp
 
          (11)   可编辑subitem的listctrl
                    http://www.codeproject.com/listctrl/nirs2000.asp
                    http://www.codeproject.com/listctrl/editing_subitems_in_listcontrol.asp
 
          (12)   subitem可编辑,插入combobox,改变行颜色,subitem的tooltip提示
                    http://www.codeproject.com/listctrl/reusablelistcontrol.asp
 
          (13)   header 中允许多行字符串
                    http://www.codeproject.com/listctrl/headerctrlex.asp
 
          (14)   插入combobox
                    http://www.codeguru.com/Cpp/controls/listview/editingitemsandsubitem/article.php/c979/
 
          (15)   添加背景图片
                    http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c4173/
                    http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c983/
                    http://www.vchelp.net/vchelp/archive.asp?type_id=9&class_id=1&cata_id=1&article_id=1088&search_term=
   
          (16)  自适应宽度的listctrl
                    http://www.codeproject.com/useritems/AutosizeListCtrl.asp

          (17)  改变ListCtrl高亮时的颜色(默认为蓝色)
                   处理 NM_CUSTOMDRAW
          
http://www.codeproject.com/listctrl/lvcustomdraw.asp

     (18)  改变header颜色
         
http://www.pocketpcdn.com/articles/hdr_color.html

分享到:
评论

相关推荐

    VC中ListCtrl经验总结

    【VC中ListCtrl经验总结】 ListCtrl是Microsoft Visual C++ MFC库中的一个重要控件,它通常用于显示多列数据,常被用作表格视图。这篇总结将介绍如何有效地使用ListCtrl,尤其是以报告(Report)模式下的一些关键...

    关于LIstCtrl的一些总结

    ### 关于ListCtrl的一些总结 #### 一、ListCtrl简介 `ListCtrl`是Windows编程中的一个重要组件,它提供了一种灵活的方式来展示一系列项,并且能够以不同的视图模式显示这些项,比如列表视图(List)、详细视图...

    VC/MFC之ListCtrl控件使用经验总结

    2. **设置ListCtrl风格及扩展风格**: - `GetWindowLong` 和 `SetWindowLong` 函数用于获取和设置控件的风格。 - `LVS_TYPEMASK` 用于清除当前显示方式。 - `LVS_REPORT` 设置报告视图。 - `LVS_EX_...

    ListCtrl内嵌按钮及其响应

    总结来说,实现`ListCtrl`的内嵌按钮和自定义绘制涉及了多个技术层面,包括图形绘制、控件创建、事件处理和消息映射。这种高级定制使得`ListCtrl`不仅可以展示数据,还可以增强用户交互性,提供更加丰富的功能。

    ListCtrl源代码

    2. **数据项与子项**:在ListCtrl中,每一行被视为一个数据项,每个数据项可以有多个子项,对应于列中的不同值。 3. **图标支持**:ListCtrl可以显示图标,通常在图标视图模式下使用。 4. **状态指示**:可以设置...

    wxpython控件之Listctrl

    本文将详细总结`ListCtrl`的各种使用方法及其特性。 #### 二、`ListCtrl`概述 `ListCtrl`有四种基本显示模式: 1. **wx.LC_ICON** - 大图标模式 2. **wx.LC_SMALL_ICON** - 小图标模式 3. **wx.LC_LIST** - 列表...

    MFC控件:listctrl使用方法总结

    ### MFC控件:ListCtrl使用方法总结 #### 一、概述 `ListCtrl`是MFC中的一个重要控件,用于展示列表数据。它能够以不同的视图样式展示信息,如大图标、小图标、列表或详细信息视图等。在MFC中,通过`CListCtrl`类...

    List Ctrl 控件总结

    ListCtrl控件是MFC框架中用于展示列表数据的一个强大组件,它继承自CListCtrl类,常用于数据库实习项目或其他需要展示结构化信息的场景。ListCtrl控件提供了多种显示样式,包括大图标、小图标、列表和详细报告,以...

    listctrl自动换行.docx

    ### ListCtrl自动换行知识点详解 #### 一、概述 在Windows编程中,`ListCtrl`(列表控件)是一种非常实用的控件,用于显示一系列条目,并且每个条目可以包含多个子项。然而,默认情况下,`ListCtrl`并不支持自动...

    改变ListCtrl字体和颜色

    ### 改变ListCtrl字体和颜色 #### 一、引言 在Windows应用程序开发中,`ListCtrl` 控件是一种非常常见的用户界面组件,用于显示列表形式的数据。然而,默认情况下,`ListCtrl` 的外观相对固定,对于需要个性化UI...

    自定义ListCtrl控件CustomListCtrl

    总结,`CustomListCtrl`提供了一种强大的方式来定制和扩展标准的`ListCtrl`控件,允许开发者创建更加丰富和交互性的用户界面。通过深入学习`CustomListCtrlDemo`,我们可以掌握如何在自己的项目中充分利用这一特性,...

    在视图上创建ListCtrl

    **步骤2:初始化ListCtrl** 在视图的OnCreate()方法中,我们初始化ListCtrl。首先,确保在资源编辑器中为视图添加了一个控件ID,例如IDC_LISTCTRL。然后,在OnCreate()中定位控件并设置其样式: ```cpp BOOL ...

    ListCtrl列表框重绘

    总结来说,ListCtrl列表框的重绘涉及到自定义项绘制、背景绘制、Owner Draw特性和图像列表的使用。掌握这些技术,可以帮助你打造出独特且功能丰富的用户界面。在实践中,不断试验和优化,你就能创造出符合项目需求的...

    在ListCtrl的栏目中加入进度条

    总结一下,在ListCtrl的栏目中加入进度条主要涉及以下步骤: 1. 创建并设置ListCtrl,启用LVS_OWNERDRAWFIXED和LVS_OWNERDATA风格。 2. 为每个列表项创建一个隐藏的CProgressCtrl对象。 3. 重写ListCtrl的`...

    listctrl自绘

    总结,`ListCtrl`自绘技术允许我们实现高度定制的列表界面,通过设置行高和使用虚拟列表模式,我们可以有效地管理和展示大量数据。自绘和虚拟列表是Windows编程中提升用户界面质量的重要手段,熟练掌握这两点对于...

    ListCtrl控件与Edit控件和Combox控件一起用

    m_listctrl.InsertColumn(2, L"item2", LVCFMT_CENTER, 100); // 注意这里重复了,应该是 "item3" m_listctrl.InsertColumn(3, L"item4", LVCFMT_CENTER, 100); // 插入数据项 m_listctrl.InsertItem(0, L"sub11");...

    python ListCtrl

    self.listCtrl.InsertColumn(2, "Column 3") for i in range(1, 7): index = self.listCtrl.InsertItem(self.listCtrl.GetItemCount(), str(i)) self.listCtrl.SetItem(index, 1, "Value %d" % i) self.list...

    实现ListCtrl中checkbox风格的单选

    2. **添加列和项目**:向`ListCtrl`中添加列以及具体的项目。 3. **设置复选框风格**:通过设置`ListCtrl`的风格,使其支持复选框显示。 4. **注册事件处理函数**:注册`LVN_ITEMCHANGED`消息的处理函数,即上面提到...

    VC2010 ListCtrl实例

    总结来说,"VC2010 ListCtrl实例"是一个MFC编程的学习资源,它教授了如何利用CListCtrl控件和数据库操作技术来构建一个用户界面,展示和管理数据库中的数据。这个实例对于初学者来说是一份宝贵的实践资料,可以帮助...

    vc中为列表控件listctrl增加列行的内容

    总结来说,为VC的列表控件ListCtrl增加列和行的内容,主要涉及以下几个步骤: 1. 初始化CListCtrl对象,并设置其风格。 2. 使用InsertColumn函数添加列,设置列标题和宽度。 3. 使用InsertItem函数插入行,并用...

Global site tag (gtag.js) - Google Analytics