前言:
眼前小伙伴们对“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画图控件