1. //自绘CListCtrl类,重载虚函数DrawItem
  2. void CNewListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
  3. {
  4. // TODO: Add your code to draw the specified item
  5. ASSERT(lpDrawItemStruct->CtlType == ODT_LISTVIEW);
  6. CDC dc;
  7. dc.Attach(lpDrawItemStruct->hDC);
  8. ASSERT(NULL != dc.GetSafeHdc());
  9. // Save these value to restore them when done drawing.
  10. COLORREF crOldTextColor = dc.GetTextColor();
  11. COLORREF crOldBkColor = dc.GetBkColor();
  12. // If this item is selected, set the background color
  13. // and the text color to appropriate values. Also, erase
  14. // rect by filling it with the background color.
  15. if ((lpDrawItemStruct->itemAction | ODA_SELECT) &&
  16. (lpDrawItemStruct->itemState & ODS_SELECTED))
  17. {
  18. dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
  19. dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
  20. dc.FillSolidRect(&lpDrawItemStruct->rcItem,
  21. ::GetSysColor(COLOR_HIGHLIGHT));
  22. }
  23. else
  24. {
  25. if(lpDrawItemStruct->itemID%2)
  26. dc.FillSolidRect(&lpDrawItemStruct->rcItem, RGB(128,128,128));
  27. else
  28. dc.FillSolidRect(&lpDrawItemStruct->rcItem, RGB(255,128,255));
  29. }
  30. // If this item has the focus, draw a red frame around the
  31. // item's rect.
  32. if ((lpDrawItemStruct->itemAction | ODA_FOCUS) &&
  33. (lpDrawItemStruct->itemState & ODS_FOCUS))
  34. {
  35. CBrush br(RGB(0, 0, 128));
  36. dc.FrameRect(&lpDrawItemStruct->rcItem, &br);
  37. }
  38. // Draw the text.
  39. CString strText(_T(""));
  40. CRect rcItem;
  41. for(int i=0; i<GetHeaderCtrl()->GetItemCount(); i++)
  42. {
  43. strText = GetItemText(lpDrawItemStruct->itemID, i);
  44. GetSubItemRect(lpDrawItemStruct->itemID, i, LVIR_LABEL, rcItem);
  45. rcItem.left += 5;
  46. dc.DrawText(
  47. strText,
  48. strText.GetLength(),
  49. &rcItem,
  50. DT_LEFT|DT_SINGLELINE|DT_VCENTER);
  51. }
  52. // Reset the background color and the text color back to their
  53. // original values.
  54. dc.SetTextColor(crOldTextColor);
  55. dc.SetBkColor(crOldBkColor);
  56. dc.Detach();
  57. }
  58. // 调用
  59. CNewListCtrl m_list; // 类的成员变量
  60. #define IDC_LIST 0x1101
  61. m_list.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|WS_VSCROLL|WS_HSCROLL|LVS_OWNERDRAWFIXED, CRect(0, 0, 280, 280), this, IDC_LIST);
  62. m_list.ModifyStyle(0, LVS_REPORT|LVS_SINGLESEL);
  63. m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
  64. m_list.InsertColumn(0, _T("AAA"), LVCFMT_LEFT, 100);
  65. m_list.InsertColumn(1, _T("BBB"), LVCFMT_LEFT, 100);
  66. CString strText(_T(""));
  67. for(int i=0; i<20; i++)
  68. {
  69. m_list.InsertItem(i, _T(""));
  70. strText.Format(_T("%d - Hello, World!"), i+1);
  71. m_list.SetItemText(i, 0, strText);
  72. strText.Format(_T("%d - ABCDEFG"), i+1);
  73. m_list.SetItemText(i, 1, strText);
  74. }

显示效果如下图所示:

http://blog.csdn.net/visualeleven/article/details/5948057

自绘CListCtrl类,重载虚函数DrawItem的更多相关文章

  1. C++ //多态 //静态多态:函数重载 和 运算符重载 属于静态多态 ,复用函数名 //动态多态:派生类和虚函数实现运行时多态

    1 //多态 2 //静态多态:函数重载 和 运算符重载 属于静态多态 ,复用函数名 3 //动态多态:派生类和虚函数实现运行时多态 4 5 //静态多态和动态多态的区别 6 //静态多态的函数地址早 ...

  2. C++ 类中有虚函数(虚函数表)时 内存分布

    虚函数表 对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的.简称为V-Table.在这个表中,主是要一个类的虚函数的地址表 ...

  3. C++基类、派生类、虚函数的几个知识点

    1.尽管派生类中含有基类继承来的成员,但派生类初始化这部分变量需要调用基类的构造函数. class A { private: int x; virtual void f(){cout<<& ...

  4. Unity3D中可重载虚函数的总结

    重载虚函数:Unity3D中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Start,Update等函数,以下做个总结. A ...

  5. C++ - 类的虚函数\虚继承所占的空间

    类的虚函数\虚继承所占的空间 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24236469 char占用一个字节, 但不满足4的 ...

  6. 简单的自绘CListBox,重载虚MeasureItem和DrawItem这两个虚函数

    [cpp] view plain copy //例如CNewListBox继承自CListBox,重载虚MeasureItem和DrawItem这两个虚函数,代码如下: void CNewListBo ...

  7. C++ - 虚基类、虚函数与纯虚函数

    虚基类       在说明其作用前先看一段代码 class A{public:    int iValue;}; class B:public A{public:    void bPrintf(){ ...

  8. C++学习笔记第三天:类、虚函数、双冒号

    类 class Box { public: double length; // 盒子的长度 double breadth; // 盒子的宽度 double height; // 盒子的高度 }; 类成 ...

  9. 获取C++类成员虚函数地址

    1.GCC平台 GCC平台获取C++成员虚函数地址可使用如下方法[1]: class Base{ int i; public: virtual void f1(){ cout<<" ...

随机推荐

  1. [uwp开发]数据绑定那些事(1)

    现在是msp候选人,是时候写点技术博客来加分了(实则是个人的心得体会). 注:以下都是个人理解,错误在所难免,欢迎批评指正 以前接触过WPF,只会简单的一些操作,现在在逐渐学习UWP(Universa ...

  2. oracle关于分区相关操作

    [sql] view plaincopy 1.查询当前用户下有哪些是分区表: SELECT * FROM USER_PART_TABLES; 2.查询当前用户下有哪些分区索引: SELECT * FR ...

  3. 基于OpenMP的矩阵乘法实现及效率提升分析

    一.  矩阵乘法串行实现 例子选择两个1024*1024的矩阵相乘,根据矩阵乘法运算得到运算结果.其中,两个矩阵中的数为double类型,初值由随机数函数产生.代码如下: #include <i ...

  4. JS的基础语法

    8.运算符号表达式 ①数学运算符 数学运算符有+.-.*./除().%(余数) var a = 10; var b = 5; alert(a+b); 预览以后在网页上弹出的对话框数值就是15. ②逻辑 ...

  5. 科学家有了钱以后,真是挺吓人的——D.E.Shaw的牛逼人生

    科学家有了钱以后,真是挺吓人的——D.E.Shaw的牛逼人生 黑科技,还是要提D.E.Shaw Research这个奇异的存在. 要讲这个黑科技,我们可能要扯远一点,先讲讲D.E. Shaw这个人是怎 ...

  6. [工作积累] Android dynamic library & JNI_OnLoad

    Bionic libc doesn't load dependencies for current .so file (diff from Windows or Linux) so a explici ...

  7. UML概述(转载)

    UML是一种标准语言,用于指定,可视化,构造和文档的软件系统. UML是OMG在1997年1月提出了创建由对象管理组织(OMG)和UML1.0规范草案. OMG不断努力,使一个真正的行业标准. UML ...

  8. HDOJ 1069 DP

    开启DP之路 题目:http://acm.hdu.edu.cn/showproblem.php?pid=1069 描述一下: 就是给定N(N<=20)个方体,让你放置,求放置的最高高度,限制条件 ...

  9. Unity3D研究院之静态自动检查代码缺陷与隐患

    原地址:原地址:http://www.xuanyusong.com/archives/2828 代码缺陷和代码错误的最大区别是,代码缺陷不影响游戏编译,而代码错误编译都不通过.但是代码缺陷会影响游戏发 ...

  10. MAC OS下使用Xcode进行GLSL编程的配置过程

    整理自之前使用的163博客原创文章. GLSL项目中需要使用GLEW库,因此先要安装GLEW库和在Xcode中配置GLEW.要使GLEW在Xcode中被正确链接,又需要通过MacPorts来安装GLE ...