MFC LIstCtrl控件表头(分割)重新绘制

MFC的原始列表的的表头只支持单行输入的,对表头重绘后可以按自己需要进行绘制;效果图如下;

具体操作步骤如下:

1. 分别派生CHeaderCtrl与CListCtrl类;我这里写的类名是CMyHeadCtrl与CMyListCtrl;以下为CMyHeadCtrl与CMyListCtrl的代码:

具体下载链接(此下载链接不用C币,个人觉得现在的资源越来越贵了,已经下载不起,这个资源就共享吧):

https://download.csdn.net/download/SELECT_destiny/21060218

2. 将类文件添加到自己的工程后,在调用的地方添加以下代码:

   2.1 头文件添加变量
    CMyListCtrl m_listWaterMeterInfo;  //列表变量;

2.2 类文件中代码 

void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
     CDialog::DoDataExchange(pDX);
     DDX_Control(pDX, IDC_LIST_WATERMETERINFO, m_listWaterMeterInfo);
}

BOOL CTestDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	CHeaderCtrl * m_head = m_listWaterMeterInfo.GetHeaderCtrl();
	m_listWaterMeterInfo.m_colorheader.SubclassWindow(m_head->GetSafeHwnd());

	//设置行高;
	CImageList   m_l;
	m_l.Create(1, 28, TRUE | ILC_COLOR32, 1, 0);//s设置行高
	m_listWaterMeterInfo.SetImageList(&m_l, LVSIL_SMALL);

	LONG lStyle;
	lStyle = GetWindowLong(m_listWaterMeterInfo.m_hWnd, GWL_STYLE);//获取当前窗口style
	lStyle &= ~LVS_TYPEMASK; //清除显示方式位
	lStyle |= LVS_REPORT;	 //设置style
	SetWindowLong(m_listWaterMeterInfo.m_hWnd, GWL_STYLE, lStyle); //设置style

	DWORD dwStyle = m_listWaterMeterInfo.GetExtendedStyle();
	dwStyle |= LVS_EX_FULLROWSELECT;	//选中某行使整行高亮(只适用与report风格的listctrl)
	dwStyle |= LVS_EX_GRIDLINES;		//网格线(只适用与report风格的listctrl)
	//dwStyle |= LVS_EX_CHECKBOXES;		//item前生成checkbox控件
	dwStyle |= LVS_EX_HEADERINALLVIEWS;
	m_listWaterMeterInfo.SetExtendedStyle(dwStyle); //设置扩展风格
			
	m_listWaterMeterInfo.InsertColumn(0, _T("序号"), LVCFMT_CENTER, 80);//插入列
	m_listWaterMeterInfo.InsertColumn(1, _T("表 号"), LVCFMT_CENTER, 150);
	m_listWaterMeterInfo.InsertColumn(2, _T("始值V0"), LVCFMT_CENTER, 60);
	m_listWaterMeterInfo.InsertColumn(3, _T("末值V1"), LVCFMT_CENTER, 60);
	m_listWaterMeterInfo.InsertColumn(4, _T("示值E %"), LVCFMT_CENTER, 60);
	m_listWaterMeterInfo.InsertColumn(5, _T("始值V0"), LVCFMT_CENTER, 60);
	m_listWaterMeterInfo.InsertColumn(6, _T("末值V1"), LVCFMT_CENTER, 60);
	m_listWaterMeterInfo.InsertColumn(7, _T("示值E %"), LVCFMT_CENTER, 60);
	m_listWaterMeterInfo.InsertColumn(8, _T("始值V0"), LVCFMT_CENTER, 60);
	m_listWaterMeterInfo.InsertColumn(9, _T("末值V1"), LVCFMT_CENTER, 60);
	m_listWaterMeterInfo.InsertColumn(10, _T("示值E %"), LVCFMT_CENTER, 60);
	int nRow = m_listWaterMeterInfo.InsertItem(2, _T("11"));//插入行
	m_listWaterMeterInfo.SetItemText(nRow, 1, _T("12"));//设置数据
	return TRUE;
}

另外:设置表头宽度的代码参考这个链接: 

https://www.cnblogs.com/ye-ming/p/7087270.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值