添加两个自定义类: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;
}