龙空技术网

修改MFC的list control控件的标题行的颜色背景和字体等

杂货匠 191

前言:

眼前小伙伴们对“mfc画图控件”大约比较关心,各位老铁们都需要剖析一些“mfc画图控件”的相关知识。那么小编同时在网上汇集了一些关于“mfc画图控件””的相关知识,希望你们能喜欢,兄弟们快快来了解一下吧!

以下基于VS2015进行说明

1 首先通过类向导(ctrl+shift+X)绑定listcontrol变量为m_list

2 重构CListCtrl类

新建类CMyListCtrl基类为CListCtrl,通过类视图-添加类实现

类里增加成员变量

CMyHeaderCtrl m_wndMyHeader;

#include "MyListCtrl.h"添加到对话框头文件里,并将m_list变量类型修改为CMyListCtrl

CMyListCtrl m_list;

3 重构CHeaderCtrl类用于标题重绘

新建类CMyHeaderCtrl基类为CHeaderCtrl,通过类视图-添加类实现

#include "MyHeaderCtrl.h"添加MyListCtrl.h头文件里

4 在这个类里面重写OnPaint()函数

通过类向导添加该类的WM_PAINT消息处理函数实现

具体处理代码如下

void CMyHeaderCtrl::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 = 171, G = 199, B = 235;//起始色素RGB

int R = 220, G = 220, B = 220;//起始色素RGB

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 -= 3; G -= 3; B -= 3;

nRect.top = nRect.bottom;

}

dc.SetBkMode(TRANSPARENT);

tRect.top += 2;

CFont nFont, *nOldFont;

dc.SetTextColor(RGB(50, 50, 50));

nFont.CreateFont(15, 0, 0, 0, 0, FALSE, FALSE, 0, 0, 0, 0, 0, 0, _TEXT("Times New Roman"));//创建字体

nOldFont = dc.SelectObject(&nFont);

TCHAR buf[256];

HD_ITEM hditem;

hditem.mask = HDI_TEXT | HDI_FORMAT | HDI_ORDER;

hditem.pszText = buf;

hditem.cchTextMax = 255;

GetItem(i, &hditem);

dc.DrawText(buf, &tRect, DT_CENTER);

dc.SelectObject(nOldFont);

nFont.DeleteObject(); //释放字体

}

}

5 重写CMyListCtrl类的OnPaint函数,增加以下内容

m_wndMyHeader.SubclassDlgItem(0, this);

通过以上步骤实现ListControl控件的标题栏修改,效果如下

标签: #mfc画图控件