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

转载自:

http://www.vckbase.com/index.php/wv/1550

 

一、 实现过程

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.}

覆盖基类InsertColumn进行列信息保存

01.int CListCtrlCl::InsertColumn(int nCol, LPCTSTR lpszColumnHeading,

02.int nFormat /* = LVCFMT_LEFT */,

03.int nWidth /* = -1 */,

04.int nSubItem /* = -1 */)

05.{

06.m_Header.m_HChar.Add(lpszColumnHeading);

07.if (nFormat==LVCFMT_LEFT)

08.{

09.m_Header.m_Format = m_Header.m_Format + "0";

10.}

11.else if (nFormat==LVCFMT_CENTER)

12.{

13.m_Header.m_Format = m_Header.m_Format + "1";

14.}

15.else if (nFormat==LVCFMT_RIGHT)

16.{

17.m_Header.m_Format = m_Header.m_Format + "2";

18.}

19.else

20.{

21.m_Header.m_Format = m_Header.m_Format + "1";

22.}

23.return CListCtrl::InsertColumn(nCol,lpszColumnHeading,nFormat,nWidth,nSubItem);

24.}

二、运行效果图如下:

三、使用方法

把HeaderCtrlCl.h, HeaderCtrlCl.cpp, ListCtrlCl.h, ListCtrlCl.cpp添加到你的工程中,在拖一个CListCtrl控件到对话框上,添加成员变量,然后在头文件中#include “ListCtrlCl.h”,把刚添加的成员变量类型改为 CListCtrlCl ,在对话框的OnInitDialog()中添加初始化代码:

view source

01.m_ListCtrl.SetColColor(0,RGB(10,150,20)); //设置列背景色

02.m_ListCtrl.SetColColor(2,RGB(30,100,90)); //设置列背景色

03.m_ListCtrl.SetBkColor(RGB(50,10,10));        //设置背景色

04.m_ListCtrl.SetItemColor(1,1,RGB(100,100,10)); //设置指定单元背景色

05.m_ListCtrl.SetRowHeigt(25);               //设置行高度

06.m_ListCtrl.SetHeaderHeight(1.5);          //设置头部高度

07.m_ListCtrl.SetHeaderFontHW(16,0);   //设置头部字体高度,和宽度,0表示缺省,自适应

08.m_ListCtrl.SetHeaderTextColor(RGB(255,200,100)); //设置头部字体颜色

09.m_ListCtrl.SetTextColor(RGB(0,255,255));  //设置文本颜色

10.m_ListCtrl.SetHeaderBKColor(100,255,100,8); //设置头部背景色

11.m_ListCtrl.SetFontHW(15,0);               //设置字体高度,和宽度,0表示缺省宽度

12.m_ListCtrl.SetColTextColor(2,RGB(255,255,100)); //设置列文本颜色

13.m_ListCtrl.SetItemTextColor(3,1,RGB(255,0,0));  //设置单元格字体颜色

 

 

 

ListCtrlCl.h的内容如下:

#pragma once
#include "HeaderCtrlCl.h"
// CListCtrlCl

class CListCtrlCl : public CListCtrl
{
 DECLARE_DYNAMIC(CListCtrlCl)

public:
 CHeaderCtrlCl m_Header;
 CListCtrlCl();
 virtual ~CListCtrlCl();

protected:
 DECLARE_MESSAGE_MAP()
 virtual void PreSubclassWindow();
public:
 virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
public:
 afx_msg void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);
 void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
public:
 // 行高
 int m_nRowHeight;
 int InsertColumn(int nCol, LPCTSTR lpszColumnHeading,
  int nFormat = LVCFMT_LEFT, int nWidth = -1, int nSubItem = -1);
public:
 // Gradient - 渐变系数,立体背景用,不用渐变设为0
 void SetHeaderBKColor(int R, int G, int B, int Gradient);
public:
 // 设置表头高度
 void SetHeaderHeight(float Height);
 CPtrList m_ptrListCol;  //保存列颜色
 CPtrList m_ptrListItem; //保存Item颜色表
 CPtrList m_colTextColor; //保存列字体颜色
 CPtrList m_ItemTextColor; //保存单元格字体颜色
 bool FindColColor(int col ,COLORREF &color); //查找列颜色
 bool FindItemColor(int col,int row,COLORREF &color);
 bool FindColTextColor(int col,COLORREF &color); //查找列字体颜色
 bool FindItemTextColor(int col,int row,COLORREF &color);
 void SetColColor(int col,COLORREF color);  //设置列颜色
 void SetItemColor(int col,int row,COLORREF color); //设置Item颜色
 void SetColTextColor(int col,COLORREF color);   //设置列文本颜色
 void SetItemTextColor(int col,int row,COLORREF color);
 void SetRowHeigt(int nHeight); //设置行高
 void SetHeaderFontHW(int nHeight,int nWith); //设置表头字体大小
 void SetHeaderTextColor(COLORREF color);
 COLORREF m_color;
 BOOL SetTextColor(COLORREF cr);
 void SetFontHW(int nHeight,int nWith);  //设置字体的高和宽
public:
 // 字体高度
 int m_fontHeight;
public:
 // 字体宽度
 int m_fontWith;
};

 

ListCtrCl.cpp的内容如下:

// ListCtrlCl.cpp : 实现文件
//

#include "stdafx.h"
#include "DemoList.h"
#include "ListCtrlCl.h"

struct stColor
{
 int nRow;
 int nCol;
 COLORREF rgb;
};
// CListCtrlCl

IMPLEMENT_DYNAMIC(CListCtrlCl, CListCtrl)

CListCtrlCl::CListCtrlCl()
: m_nRowHeight(0)
, m_fontHeight(12)
, m_fontWith(0)
{
 m_color = RGB(0,0,0);
}

CListCtrlCl::~CListCtrlCl()
{
}


BEGIN_MESSAGE_MAP(CListCtrlCl, CListCtrl)
 ON_WM_MEASUREITEM()
 ON_WM_MEASUREITEM_REFLECT()
END_MESSAGE_MAP()

 

// CListCtrlCl 消息处理程序

 

void CListCtrlCl::PreSubclassWindow()
{
 // TODO: 在此添加专用代码和/或调用基类
 ModifyStyle(0,LVS_OWNERDRAWFIXED);
 CListCtrl::PreSubclassWindow();
 CHeaderCtrl *pHeader = GetHeaderCtrl();
 m_Header.SubclassWindow(pHeader->GetSafeHwnd());
}

void CListCtrlCl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{

 // TODO:  添加您的代码以绘制指定项
 TCHAR lpBuffer[256];

 LV_ITEM lvi;

 lvi.mask = LVIF_TEXT | LVIF_PARAM ;
 lvi.iItem = lpDrawItemStruct->itemID ;
 lvi.iSubItem = 0;
 lvi.pszText = lpBuffer ;
 lvi.cchTextMax = sizeof(lpBuffer);
 VERIFY(GetItem(&lvi));

 LV_COLUMN lvc, lvcprev ;
 ::ZeroMemory(&lvc, sizeof(lvc));
 ::ZeroMemory(&lvcprev, sizeof(lvcprev));
 lvc.mask = LVCF_WIDTH | LVCF_FMT;
 lvcprev.mask = LVCF_WIDTH | LVCF_FMT;

 CDC* pDC;
 pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
 CRect rtClient;
 GetClientRect(&rtClient);
 for ( int nCol=0; GetColumn(nCol, &lvc); nCol++)
 {
  if ( nCol > 0 )
  {
   // Get Previous Column Width in order to move the next display item
   GetColumn(nCol-1, &lvcprev) ;
   lpDrawItemStruct->rcItem.left += lvcprev.cx ;
   lpDrawItemStruct->rcItem.right += lpDrawItemStruct->rcItem.left;
  }

  CRect rcItem;  
  if (!GetSubItemRect(lpDrawItemStruct->itemID,nCol,LVIR_LABEL,rcItem))  
   continue;  

  ::ZeroMemory(&lvi, sizeof(lvi));
  lvi.iItem = lpDrawItemStruct->itemID;
  lvi.mask = LVIF_TEXT | LVIF_PARAM;
  lvi.iSubItem = nCol;
  lvi.pszText = lpBuffer;
  lvi.cchTextMax = sizeof(lpBuffer);
  VERIFY(GetItem(&lvi));
  CRect rcTemp;
  rcTemp = rcItem;

  if (nCol==0)
  {
   rcTemp.left -=2;
  }

  if ( lpDrawItemStruct->itemState & ODS_SELECTED )
  {
   pDC->FillSolidRect(&rcTemp, GetSysColor(COLOR_HIGHLIGHT)) ;
   pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT)) ;
  }
  else
  {
   COLORREF color;
   color = GetBkColor();
   pDC->FillSolidRect(rcTemp,color);

   if (FindColColor(nCol,color))
   {
    pDC->FillSolidRect(rcTemp,color);
   }
   if (FindItemColor(nCol,lpDrawItemStruct->itemID,color))
   {
    pDC->FillSolidRect(rcTemp,color);
   }
   
   //pDC->SetTextColor(m_color);
  }

  pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));

  UINT   uFormat    = DT_CENTER ;
  if (m_Header.m_Format[nCol]=='0')
  {
   uFormat = DT_LEFT;
  }
  else if (m_Header.m_Format[nCol]=='1')
  {
   uFormat = DT_CENTER;
  }
  else if (m_Header.m_Format[nCol]=='2')
  {
   uFormat = DT_RIGHT;
  }
  TEXTMETRIC metric;
  pDC->GetTextMetrics(&metric);
  int ofst;
  ofst = rcItem.Height() - metric.tmHeight;
  rcItem.OffsetRect(0,ofst/2);
  pDC->SetTextColor(m_color);
  COLORREF color;
  if (FindColTextColor(nCol,color))
  {
   pDC->SetTextColor(color);
  }
  if (FindItemTextColor(nCol,lpDrawItemStruct->itemID,color))
  {
   pDC->SetTextColor(color);
  }
  CFont nFont ,* nOldFont;
  nFont.CreateFont(m_fontHeight,m_fontWith,0,0,0,FALSE,FALSE,0,0,0,0,0,0,_TEXT("宋体"));//创建字体
  nOldFont = pDC->SelectObject(&nFont);
  DrawText(lpDrawItemStruct->hDC, lpBuffer, strlen(lpBuffer),
   &rcItem, uFormat) ;

  pDC->SelectStockObject(SYSTEM_FONT) ;
 }

}

void CListCtrlCl::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
 // TODO: 在此添加消息处理程序代码和/或调用默认值

 CListCtrl::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}
void CListCtrlCl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
 if (m_nRowHeight>0)
 {
  lpMeasureItemStruct->itemHeight = m_nRowHeight;
 }
}
int CListCtrlCl::InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat /* = LVCFMT_LEFT */, int nWidth /* = -1 */, int nSubItem /* = -1 */)
{
 m_Header.m_HChar.Add(lpszColumnHeading);
 if (nFormat==LVCFMT_LEFT)
 {
  m_Header.m_Format = m_Header.m_Format + "0";
 }
 else if (nFormat==LVCFMT_CENTER)
 {
  m_Header.m_Format = m_Header.m_Format + "1";
 }
 else if (nFormat==LVCFMT_RIGHT)
 {
  m_Header.m_Format = m_Header.m_Format + "2";
 }
 else
 {
  m_Header.m_Format = m_Header.m_Format + "1";
 }
 return CListCtrl::InsertColumn(nCol,lpszColumnHeading,nFormat,nWidth,nSubItem);
}
// Gradient - 渐变系数,立体背景用,不用渐变设为0
void CListCtrlCl::SetHeaderBKColor(int R, int G, int B, int Gradient) //设置表头背景色
{
 m_Header.m_R = R;
 m_Header.m_G = G;
 m_Header.m_B = B;
 m_Header.m_Gradient = Gradient;
}

// 设置表头高度
void CListCtrlCl::SetHeaderHeight(float Height) //设置表头高度
{
 m_Header.m_Height = Height;
}
bool CListCtrlCl::FindColColor(int col,COLORREF &color) //查找列颜色
{
 int flag = 0;
 for (POSITION pos = m_ptrListCol.GetHeadPosition();pos!=NULL;)
 {
  stColor *pColor = (stColor*)m_ptrListCol.GetNext(pos);
  if (pColor->nCol==col)
  {
   flag = 1;
   color = pColor->rgb;
   break;
  }
 }
 if (1==flag)
 {
  return true;
 }
 return false;
}
bool CListCtrlCl::FindItemColor(int col,int row,COLORREF &color) //查找颜色
{
 int flag = 0;
 for (POSITION pos = m_ptrListItem.GetHeadPosition();pos!=NULL;)
 {
  stColor *pColor = (stColor*)m_ptrListItem.GetNext(pos);
  if (pColor->nCol==col&&pColor->nRow==row)
  {
   flag = 1;
   color = pColor->rgb;
   break;
  }
 }
 if (1==flag)
 {
  return true;
 }
 return false;
}
void CListCtrlCl::SetColColor(int col,COLORREF color) //设置列颜色
{
 stColor *pColor  = new stColor;
 pColor->nCol = col;
 pColor->rgb = color;
 m_ptrListCol.AddTail(pColor);
}
void CListCtrlCl::SetItemColor(int col,int row,COLORREF color) //设置格子颜色
{
 stColor *pColor  = new stColor;
 pColor->nCol = col;
 pColor->nRow = row;
 pColor->rgb = color;
 m_ptrListItem.AddTail(pColor);
}
void CListCtrlCl::SetRowHeigt(int nHeight) //高置行高
{
 m_nRowHeight = nHeight;

 CRect rcWin;
 GetWindowRect(&rcWin);
 WINDOWPOS wp;
 wp.hwnd = m_hWnd;
 wp.cx = rcWin.Width();
 wp.cy = rcWin.Height();
 wp.flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER;
 SendMessage(WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp);
}
void CListCtrlCl::SetHeaderFontHW(int nHeight,int nWith) //设置头部字体宽和高
{
 m_Header.m_fontHeight = nHeight;
 m_Header.m_fontWith = nWith;
}
void CListCtrlCl::SetHeaderTextColor(COLORREF color) //设置头部字体颜色
{
 m_Header.m_color = color;
}
BOOL CListCtrlCl::SetTextColor(COLORREF cr)  //设置字体颜色
{
 m_color = cr;
 return TRUE;
}
void CListCtrlCl::SetFontHW(int nHeight,int nWith) //设置字体高和宽
{
 m_fontHeight = nHeight;
 m_fontWith = nWith;
}
void CListCtrlCl::SetColTextColor(int col,COLORREF color)
{
 stColor *pColor = new stColor;
 pColor->nCol = col;
 pColor->rgb = color;
 m_colTextColor.AddTail(pColor);
}
bool CListCtrlCl::FindColTextColor(int col,COLORREF &color)
{
 int flag = 0;
 for (POSITION pos = m_colTextColor.GetHeadPosition();pos!=NULL;)
 {
  stColor *pColor = (stColor*)m_colTextColor.GetNext(pos);
  if (pColor->nCol==col)
  {
   flag = 1;
   color = pColor->rgb;
   break;
  }
 }
 if (1==flag)
 {
  return true;
 }
 return false;
}
bool CListCtrlCl::FindItemTextColor(int col,int row,COLORREF &color)
{
 int flag = 0;
 for (POSITION pos = m_ItemTextColor.GetHeadPosition();pos!=NULL;)
 {
  stColor *pColor = (stColor*)m_ItemTextColor.GetNext(pos);
  if (pColor->nCol==col&&pColor->nRow==row)
  {
   flag = 1;
   color = pColor->rgb;
   break;
  }
 }
 if (1==flag)
 {
  return true;
 }
 return false;
}
void CListCtrlCl::SetItemTextColor(int col,int row,COLORREF color)
{
 stColor *pColor = new stColor;
 pColor->nCol = col;
 pColor->nRow = row;
 pColor->rgb = color;
 m_ItemTextColor.AddTail(pColor);
}

HeaderCtrlCl.h的内容如下:

#pragma once


// CHeaderCtrlCl

class CHeaderCtrlCl : public CHeaderCtrl
{
 DECLARE_DYNAMIC(CHeaderCtrlCl)

public:
 CHeaderCtrlCl();
 virtual ~CHeaderCtrlCl();

protected:
 DECLARE_MESSAGE_MAP()
public:
 afx_msg void OnPaint();
 CStringArray m_HChar;
 CString m_Format; //表示对齐类型的整型数组,0表示左对齐,1表示中间对齐,2表示右对齐
public:
 int m_R;
 int m_G;
 int m_B;
 int m_Gradient; // 画立体背景,渐变系数
 float m_Height;  //表头高度,这是倍数,
 int m_fontHeight; //字体高度
 int m_fontWith;   //字体宽度
 COLORREF m_color;
 LRESULT OnLayout( WPARAM wParam, LPARAM lParam );
};


 

HeaderCtrlCl.cpp的内容如下:

// HeaderCtrlCl.cpp : 实现文件
//

#include "stdafx.h"
#include "DemoList.h"
#include "HeaderCtrlCl.h"


// CHeaderCtrlCl

IMPLEMENT_DYNAMIC(CHeaderCtrlCl, CHeaderCtrl)

CHeaderCtrlCl::CHeaderCtrlCl()
: m_R(171)
, m_G(199)
, m_B(235)
, m_Gradient(8)
{
 m_Format = "";
 m_Height = 1;
 m_fontHeight = 15;
 m_fontWith = 0;
 m_color = RGB(0,0,0);
}

CHeaderCtrlCl::~CHeaderCtrlCl()
{
}


BEGIN_MESSAGE_MAP(CHeaderCtrlCl, CHeaderCtrl)
 ON_WM_PAINT()
 ON_MESSAGE(HDM_LAYOUT, OnLayout)
END_MESSAGE_MAP()

 

// CHeaderCtrlCl 消息处理程序

 

void CHeaderCtrlCl::OnPaint()
{
 CPaintDC dc(this); // device context for painting
 // TODO: 在此处添加消息处理程序代码
 // 不为绘图消息调用 CHeaderCtrl::OnPaint()
 int nItem;
 nItem = GetItemCount();//得到有几个单元
 for(int i = 0; i<nItem;i ++)
 {
  CRect tRect;
  GetItemRect(i,&tRect);//得到Item的尺寸
  int R = m_R,G = m_G,B = m_B;
  CRect nRect(tRect);//拷贝尺寸到新的容器中
  nRect.left++;//留出分割线的地方
  //绘制立体背景
  for(int j = tRect.top;j<=tRect.bottom;j++)
  {
   nRect.bottom = nRect.top+1;
   CBrush _brush;
   _brush.CreateSolidBrush(RGB(R,G,B));//创建画刷
   dc.FillRect(&nRect,&_brush); //填充背景
   _brush.DeleteObject(); //释放画刷
   R-=m_Gradient;G-=m_Gradient;B-=m_Gradient;
   if (R<0)R = 0;
   if (G<0)G = 0;
   if (B<0)B= 0;
   nRect.top = nRect.bottom;
  }
  dc.SetBkMode(TRANSPARENT);
  CFont nFont ,* nOldFont;
  //dc.SetTextColor(RGB(250,50,50));
  dc.SetTextColor(m_color);
  nFont.CreateFont(m_fontHeight,m_fontWith,0,0,0,FALSE,FALSE,0,0,0,0,0,0,_TEXT("宋体"));//创建字体
  nOldFont = dc.SelectObject(&nFont);

  UINT nFormat = 1;
  if (m_Format[i]=='0')
  {
   nFormat = DT_LEFT;
   tRect.left+=3;
  }
  else if (m_Format[i]=='1')
  {
   nFormat = DT_CENTER;
  }
  else if (m_Format[i]=='2')
  {
   nFormat = DT_RIGHT;
   tRect.right-=3;
  }
  TEXTMETRIC metric;
  dc.GetTextMetrics(&metric);
  int ofst = 0;
  ofst = tRect.Height() - metric.tmHeight;
  tRect.OffsetRect(0,ofst/2);
  dc.DrawText(m_HChar[i],&tRect,nFormat);
  dc.SelectObject(nOldFont);
  nFont.DeleteObject(); //释放字体
 }
 //画头部剩余部分
 CRect rtRect;
 CRect clientRect;
 GetItemRect(nItem - 1,rtRect);
 GetClientRect(clientRect);
 rtRect.left = rtRect.right+1;
 rtRect.right = clientRect.right;
 int R = m_R,G = m_G,B = m_B;
 CRect nRect(rtRect);
 //绘制立体背景
 for(int j = rtRect.top;j<=rtRect.bottom;j++)
 {
  nRect.bottom = nRect.top+1;
  CBrush _brush;
  _brush.CreateSolidBrush(RGB(R,G,B));//创建画刷
  dc.FillRect(&nRect,&_brush); //填充背景
  _brush.DeleteObject(); //释放画刷
  R-=m_Gradient;G-=m_Gradient;B-=m_Gradient;
  if (R<0)R = 0;
  if (G<0)G = 0;
  if (B<0)B= 0;
  nRect.top = nRect.bottom;
 }
}
LRESULT CHeaderCtrlCl::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;

 //表头高度为原来1.5倍,如果要动态修改表头高度的话,将1.5设成一个全局变量
 int nHeight = (int)(pwpos->cy * m_Height);
 pwpos->cy = nHeight;
 prc->top = nHeight;
 return lResult;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值