自绘CListCtrl类,重载虚函数DrawItem
- //自绘CListCtrl类,重载虚函数DrawItem
 - void CNewListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
 - {
 - // TODO: Add your code to draw the specified item
 - ASSERT(lpDrawItemStruct->CtlType == ODT_LISTVIEW);
 - CDC dc;
 - dc.Attach(lpDrawItemStruct->hDC);
 - ASSERT(NULL != dc.GetSafeHdc());
 - // Save these value to restore them when done drawing.
 - COLORREF crOldTextColor = dc.GetTextColor();
 - COLORREF crOldBkColor = dc.GetBkColor();
 - // If this item is selected, set the background color
 - // and the text color to appropriate values. Also, erase
 - // rect by filling it with the background color.
 - if ((lpDrawItemStruct->itemAction | ODA_SELECT) &&
 - (lpDrawItemStruct->itemState & ODS_SELECTED))
 - {
 - dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
 - dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
 - dc.FillSolidRect(&lpDrawItemStruct->rcItem,
 - ::GetSysColor(COLOR_HIGHLIGHT));
 - }
 - else
 - {
 - if(lpDrawItemStruct->itemID%2)
 - dc.FillSolidRect(&lpDrawItemStruct->rcItem, RGB(128,128,128));
 - else
 - dc.FillSolidRect(&lpDrawItemStruct->rcItem, RGB(255,128,255));
 - }
 - // If this item has the focus, draw a red frame around the
 - // item's rect.
 - if ((lpDrawItemStruct->itemAction | ODA_FOCUS) &&
 - (lpDrawItemStruct->itemState & ODS_FOCUS))
 - {
 - CBrush br(RGB(0, 0, 128));
 - dc.FrameRect(&lpDrawItemStruct->rcItem, &br);
 - }
 - // Draw the text.
 - CString strText(_T(""));
 - CRect rcItem;
 - for(int i=0; i<GetHeaderCtrl()->GetItemCount(); i++)
 - {
 - strText = GetItemText(lpDrawItemStruct->itemID, i);
 - GetSubItemRect(lpDrawItemStruct->itemID, i, LVIR_LABEL, rcItem);
 - rcItem.left += 5;
 - dc.DrawText(
 - strText,
 - strText.GetLength(),
 - &rcItem,
 - DT_LEFT|DT_SINGLELINE|DT_VCENTER);
 - }
 - // Reset the background color and the text color back to their
 - // original values.
 - dc.SetTextColor(crOldTextColor);
 - dc.SetBkColor(crOldBkColor);
 - dc.Detach();
 - }
 - // 调用
 - CNewListCtrl m_list; // 类的成员变量
 - #define IDC_LIST 0x1101
 - m_list.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|WS_VSCROLL|WS_HSCROLL|LVS_OWNERDRAWFIXED, CRect(0, 0, 280, 280), this, IDC_LIST);
 - m_list.ModifyStyle(0, LVS_REPORT|LVS_SINGLESEL);
 - m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
 - m_list.InsertColumn(0, _T("AAA"), LVCFMT_LEFT, 100);
 - m_list.InsertColumn(1, _T("BBB"), LVCFMT_LEFT, 100);
 - CString strText(_T(""));
 - for(int i=0; i<20; i++)
 - {
 - m_list.InsertItem(i, _T(""));
 - strText.Format(_T("%d - Hello, World!"), i+1);
 - m_list.SetItemText(i, 0, strText);
 - strText.Format(_T("%d - ABCDEFG"), i+1);
 - m_list.SetItemText(i, 1, strText);
 - }
 
显示效果如下图所示:

http://blog.csdn.net/visualeleven/article/details/5948057
自绘CListCtrl类,重载虚函数DrawItem的更多相关文章
- C++ //多态 //静态多态:函数重载 和 运算符重载 属于静态多态 ,复用函数名 //动态多态:派生类和虚函数实现运行时多态
		
1 //多态 2 //静态多态:函数重载 和 运算符重载 属于静态多态 ,复用函数名 3 //动态多态:派生类和虚函数实现运行时多态 4 5 //静态多态和动态多态的区别 6 //静态多态的函数地址早 ...
 - C++  类中有虚函数(虚函数表)时   内存分布
		
虚函数表 对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的.简称为V-Table.在这个表中,主是要一个类的虚函数的地址表 ...
 - C++基类、派生类、虚函数的几个知识点
		
1.尽管派生类中含有基类继承来的成员,但派生类初始化这部分变量需要调用基类的构造函数. class A { private: int x; virtual void f(){cout<<& ...
 - Unity3D中可重载虚函数的总结
		
重载虚函数:Unity3D中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Start,Update等函数,以下做个总结. A ...
 - C++ - 类的虚函数\虚继承所占的空间
		
类的虚函数\虚继承所占的空间 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24236469 char占用一个字节, 但不满足4的 ...
 - 简单的自绘CListBox,重载虚MeasureItem和DrawItem这两个虚函数
		
[cpp] view plain copy //例如CNewListBox继承自CListBox,重载虚MeasureItem和DrawItem这两个虚函数,代码如下: void CNewListBo ...
 - C++ - 虚基类、虚函数与纯虚函数
		
虚基类 在说明其作用前先看一段代码 class A{public: int iValue;}; class B:public A{public: void bPrintf(){ ...
 - C++学习笔记第三天:类、虚函数、双冒号
		
类 class Box { public: double length; // 盒子的长度 double breadth; // 盒子的宽度 double height; // 盒子的高度 }; 类成 ...
 - 获取C++类成员虚函数地址
		
1.GCC平台 GCC平台获取C++成员虚函数地址可使用如下方法[1]: class Base{ int i; public: virtual void f1(){ cout<<" ...
 
随机推荐
- The underlying JVM is how to realize the synchronized
			
http://www.programering.com/a/MjN0IjMwATg.html
 - Leetcode Variant-Plus N
			
Given a non-negative number represented as an array of digits, plus N to the number. The digits are ...
 - 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)
			
题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...
 - background-origin
			
background-origin 设置元素背景图片的原始起始位置. 语法: background-origin : border-box | padding-box | content-box; 参 ...
 - 怎么用PHP发送HTTP请求(转载)
			
本文转自:http://blog.snsgou.com/blog/161.html file_get_contents版本: /** * 发送post请求 * @param string $url ...
 - bzoj 1800 暴力枚举
			
直接暴力枚举四个点,然后判断是否能组成矩形就行了 注意枚举的点的标号从小到大,保证不重复枚举 /**************************************************** ...
 - shell编程之分隔符
			
1 #!/bin/bash 2 line="root:x:0:0:root:/root:bin/bash" 3 oldIFS=$IFS 4 IFS=":" 5 ...
 - C++实现CString和string的互相转换
			
CString->std::string 例子: CString strMfc=“test“; std::string strStl; strStl=strMfc.GetBuffer(0); u ...
 - RAID磁盘阵列学习笔记
			
RAID是“Redundant Array of Independent Disk”的缩写,中文意思是独立冗余磁盘阵列.简单地解释,就是将N台硬盘通过RAID Controller(分Hardware ...
 - 定位position详解:relative与absolute
			
定位标签:position 包含属性:relative(相对) absolute(绝对) 1.position:relative; 如果对一个元素进行相对定位,首先它将出现在它所在的位置上.然后通过设 ...