改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景(一)

一、 实现过程

1.表头修改

新建一个MFC类CHeaderCtrlCl,其基类为CHeaderCtrl,响应OnPaint消息实现自绘,实现代码请看源代码(由于代码较占篇幅,所以就不贴上来了,抱歉),在头文件中定义函数LRESULT OnLayout( WPARAM wParam, LPARAM lParam ),之后手动添加消息响应ON_MESSAGE(HDM_LAYOUT, OnLayout),在消息响应中改变高度,实现代码如下:

01.LRESULT CHeaderCtrlCl::OnLayout( WPARAM wParam, LPARAM lParam )

02.{

03.LRESULT lResult = CHeaderCtrl::DefWindowProc(HDM_LAYOUT, 0, lParam);

04.HD_LAYOUT &hdl = *( HD_LAYOUT * ) lParam;

05.RECT *prc = hdl.prc;

06.WINDOWPOS *pwpos = hdl.pwpos;

07.int nHeight = (int)(pwpos->cy * m_Height); //改变高度,m_Height为倍数

08.pwpos->cy = nHeight;

09.prc->top = nHeight;

10.return lResult;

11.}

2. 表的修改

新建一个MFC类CListCtrlCl,其基类为CListCtrl,定义一个CHeaderCtrlCl的成员变量m_Header,重载PreSubclassWindow(),在函数中修改控件类型为自绘模式,然后子类化表头,代码如下:

1.void CListCtrlCl::PreSubclassWindow()

2.{

3.// TODO: 在此添加专用代码和/或调用基类

4.ModifyStyle(0,LVS_OWNERDRAWFIXED);

5.CListCtrl::PreSubclassWindow();

6.CHeaderCtrl *pHeader = GetHeaderCtrl();

7.m_Header.SubclassWindow(pHeader->GetSafeHwnd());

8.}

添加成员变量,保存一些基本信息。

1.CPtrList m_ptrListCol;  //保存列颜色

2.CPtrList m_ptrListItem; //保存Item颜色表

3.CPtrList m_colTextColor; //保存列字体颜色

4.CPtrList m_ItemTextColor; //保存单元格字体颜色

重载DrawItem()实现自绘,实现代码请参照代码。 手动添加消息宏ON_WM_MEASUREITEM_REFLECT(),添加下面的函数,实现修改行高。

1.void CListCtrlCl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)

2.{

3.if (m_nRowHeight>0)

4.{

5.lpMeasureItemStruct->itemHeight = m_nRowHeight;

6.}

7.}

添加消息处理OnMeasureItem()

1.void CListCtrlCl::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)

2.{

3.// TODO: 在此添加消息处理程序代码和/或调用默认值

4.CListCtrl::OnMeasureItem(nIDCtl, lpMeasureItemStruct);

5.}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值