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. opencv颜色识别代码分享

    android 平台 opencv 实现颜色识别代码:http://www.eyesourcecode.com/thread-40682-1-1.htmlopencv的颜色识别简单实现的代码:http ...

  2. Eclipse中的常用快捷键

    快捷修复 Command+1 //int a=100L; //int a=(int) 100L; 快捷删除行 Command+D 快速起新行 Shift+Enter (当本行代码很长时,将光标定在本行 ...

  3. Careercup - Google面试题 - 5085331422445568

    2014-05-08 23:45 题目链接 原题: How would you use Dijkstra's algorithm to solve travel salesman problem, w ...

  4. android 开发 socket发送会有部分乱码,串码,伴随着数据接收不完整

    场景: 客户端A.B,A向B发送json字符串后紧接着发送文件,B接收到文件后才返回消息. 环境:android.使用的是原始的write 和read (若使用的是writeUTF不会出现此问题.)需 ...

  5. socket 套接字

    网络:交换机,路由器,网线 交换机:分配.. 路由器:找寻网络线路 网络架构: 应用层 ---> 表示层 ---> 会话层 ---> 传输层 ---> 网络层 ---> ...

  6. 自己学习编程时间比较短,现在把一下自己以前刚刚接触C++时的程序上传一下,有空可以看看

    键盘输入十个数,找出最大值和最小值. #include<iostream.h>void main (){int a[10];int i,t,max,min;cout<<&quo ...

  7. ExtjsMVC开发过程中遇到的具体问题总结

    1.登陆相关问题 1.如何在文本框中增加提示信息             2.如何在文本框中触发回车事件             3.如何在回车事件中触发按钮的动作             总结:ht ...

  8. eclipse 中卸载插件的方法

    卸载步骤: Help -> About Eclipse -> Installation Details -> "点到你要删除的插件,如EclipseME" –&g ...

  9. [原] blade中C++ singleton的实现

    最近看了龚大大KalyGE中的singleton, 觉得非常不错(C++中线程安全并且高效的singleton). 可惜blade的代码都是C++03的, 没有使用C++11的任何特性. 笔者对于si ...

  10. [百度空间] [转] 在 Visual C++ 中控制全局对象的初始化顺序

    from: http://blog.csdn.net/classfactory/archive/2004/08/07/68202.aspx 在 C++ 中,同一个翻译单位(.cpp文件)里的全局对象的 ...