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;
}
另外:设置表头宽度的代码参考这个链接: