以下是网上流传自绘CListCtrl控件的方法:不过有几个问题需要注意一下:
以下功能在静态创建时没有问题,动态创建是会出现两个问题
一.控件的表没有自动重绘,没有实现换肤。在CListCtrlCL类中设置断点,进入不了CListCtrlCl::DrawItem(),原因是在动态创建是没有LVS_OWNERDRAWFIXED风格。
解决办法: m_list->Create( LVS_REPORT|LVS_OWNERDRAWFIXED |WS_CHILD|WS_VISIBLE|LBS_NOTIFY|LBS_NOINTEGRALHEIGHT&~WS_BORDER , m_rect, this, 456121)
二.表头也没有完成换肤
查看源代码,调试发现在中CListCtrlCl::PreSubclassWindow()中GetHeaderCtrl();返回值为NULL。
解决办法:重载oncreat()函数 将 CHeaderCtrl *pHeader = GetHeaderCtrl();
m_Header.SubclassWindow(pHeader->GetSafeHwnd());这两行放入oncreat()中。
改正后的源码下载地址:http://download.youkuaiyun.com/detail/chenyixin121738/9706922
用CListCtrl来显示数据比较方便,有时候我们需要标注某一列或某一个单元格的背景和字体颜色,或者需要改变一下行高和字体大小,CListCtrl要改变这些并不是很方便。本文将介绍如何派生一个类来改变CListCtrl及其表头的高度、字体大小、列背景颜色、单元格背景颜色、列字体颜色、单元格字体颜色
实现过程:
1.表头修改
新建一个MFC类CHeaderCtrlCl,其基类为CHeaderCtrl,响应OnPaint消息实现自绘,在头文件中定义函数LRESULT OnLayout( WPARAM wParam, LPARAM lParam ),之后手动添加消息响应ON_MESSAGE(HDM_LAYOUT, OnLayout),在消息响应中改变高度。
HeaderCtrlCl.h文件的代码如下:
class CHeaderCtrlCl : public CHeaderCtrl
{
DECLARE_DYNAMIC(CHeaderCtrlCl)
public:
CH