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. js原型继承与多态 How to apply virtual function in javascript

    function BaseClass() { this.hello = function() { this.talk(); } this.talk = function() { document.wr ...

  2. 树的基本操作java版

    看了一下树的定义,一些基本的操作,遍历,获取节点数,获取深度等等..这里参考了西电版的数据结构,基本用的都是递归实现的. 很多说明代码中都有,每个方法我都测了一下,这里我把节点类BTreeNode作为 ...

  3. panel面板

    描述:作为承载其他内容的容器的,装载其他组件基础,可折叠.关闭.最大化.最小化和自定义行为.面板可以很容易地嵌入到web页面的任何位置. 其他属性请参考api! 案例1:纯html生成 <div ...

  4. js—对象

    一.创建对象 var car = new Object(); var car = {}; 二.属性和方法 var car = { color : "red", run : func ...

  5. LeetCode Shell Problems

    195. Tenth Line -- 第十行 How would you print just the 10th line of a file? Solution: awk 'NR==10' file ...

  6. ORM 框架

    1.Dapper 2.Entity Framework(EF) http://www.cnblogs.com/n-pei/archive/2011/09/06/2168433.html

  7. 学习Linux第三天

    1.常用的命令: reset 清屏 leave +hhmm 建立离开提醒 sudo apt-get yum 安装yum程序 sudo su 切换root身份 see test.c 可以直接查看文件,神 ...

  8. Incorrect string value: '\xF0\xA1\xA1\x92' for column 'herst' at row 1

    Incorrect string value: '\xF0\xA1\xA1\x92' for column 'herst' at row 1[转] 1.一般来说MySQL(小于5.5.3)字符集设置为 ...

  9. 类模板的困扰 LNK2019 (转)

    原文地址:http://www.eetop.cn/blog/html/93/493893-14903.html 在使用类模板技术时,可在.h中实现,也可在.h和.cpp中分开实现,若用.h实现,不要在 ...

  10. IDA*

    模拟退火 基本思路(Main Thoughts): IDA*是一种优秀的搜索法,在一般的实际问题中,它比普通的搜索更快. 通过迭代加深和估价函数剪枝来搜索. 通常处理没有层数上界或上界很多大的搜索. ...