一、 实现过程
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.}
3223

被折叠的 条评论
为什么被折叠?



