改变 自绘 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景及其动态创建中的问题

以下是网上流传自绘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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值