利用HDN_LAYOUT改变CListCtrl表头高度

添加两个自定义类:CYJListCtrl:CListCtrl和CYJHeaderCtrl:CHeaderCtrl

1、在YJListCtrl.h中加入:

#include "YJHeaderCtrl.h"

2、定义成员变量:

private:
    CYJHeaderCtrl m_headerCtrl;

3、定义成员函数:

public:
	void SetHeaderHeight(int nHeight);

4、重载PreSubclassWindow,在YJListCtrl.cpp中添加代码:

ModifyStyle(0,LVS_OWNERDRAWFIXED);
CListCtrl::PreSubclassWindow();

// 关联表头,若不关联,将无法相应HDN_LAYOUT
CHeaderCtrl *pHeader = GetHeaderCtrl();
m_headerCtrl.SubclassWindow(pHeader->GetSafeHwnd());

5、在YJListCtrl.cpp实现设置表头行高

void CYJListCtrl::SetHeaderHeight(int nHeight)
{
	m_headerCtrl.SetRowHeight(nHeight);
}

6、在YJHeaderCtrl.h中添加:

private:
	int m_nRowHeight;		            // 表头行高
	LRESULT OnLayout( WPARAM wParam, LPARAM lParam );    // 手动添加

public:
	void SetRowHeight(int nHeight);    // 设置行高

7、在构造函数中初始化行高

CYJHeaderCtrl::CYJHeaderCtrl()
{
	m_nRowHeight = 28;
}

8、手动添加

BEGIN_MESSAGE_MAP(CYJHeaderCtrl, CHeaderCtrl)
	ON_MESSAGE(HDM_LAYOUT, OnLayout)
END_MESSAGE_MAP()
LRESULT CYJHeaderCtrl::OnLayout( WPARAM wParam, LPARAM lParam )
{
	LRESULT lResult = CHeaderCtrl::DefWindowProc(HDM_LAYOUT, 0, lParam); 

	HD_LAYOUT &hdl = *( HD_LAYOUT * ) lParam; 

	RECT *prc = hdl.prc; 
	WINDOWPOS *pwpos = hdl.pwpos; 

	pwpos->cy = m_nRowHeight; 
	prc->top = m_nRowHeight; 

	return lResult; 
}
void CYJHeaderCtrl::SetRowHeight(int nHeight)
{
	m_nRowHeight = nHeight;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值