ListCtrl控件表头如何合并

LoneWanderer1 2017-11-25 02:45:55
如题,我现在想实现如下的形式

现在我已经完成了list控件的item部分,就差表头了
表头也是分列的,但是现在我想表头部分只有一列,具体效果如上图所示
这个要怎么做啊,是要重绘表头吗
希望大佬们解答
...全文
255 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
LoneWanderer1 2017-11-26
  • 打赏
  • 举报
回复
问题解决了,谢谢大佬们的解答,给了不少启发与借鉴
schlafenhamster 2017-11-25
  • 打赏
  • 举报
回复
class CMyHead : public CHeaderCtrl ///////////////////////////////////////////////////////////

void CMyHead::DrawItem(LPDRAWITEMSTRUCT pDIS)
{
	// TODO: Add your message handler code here and/or call default
	HDITEM hDI;
	TCHAR szBuf[MAX_PATH];

	hDI.mask = HDI_TEXT;
	hDI.pszText = szBuf;
	hDI.cchTextMax = MAX_PATH;
	GetItem(pDIS->itemID, &hDI);

	CDC *pDC;
	HDC hDC = pDIS->hDC;  // Handle to device context
	pDC = CDC::FromHandle(hDC);

	int x = 0;  // x-coordinate of reference point
	int y = 0;  // y-coordinate of reference point
	UINT nOptions = 0;  // Text-output options ETO_CLIPPED|ETO_OPAQUE
	RECT *pIRect = NULL;  // Optional clipping and/or opaquing rectangle

	pIRect = &pDIS->rcItem;
	SIZE Size = {0};
//*** Gets the header cell sizes
	if(!GetTextExtentPoint(hDC, szBuf, strlen(szBuf), &Size))
	{
		AfxMessageBox("Failed to call GetTextExtentPoint for table header!");
		return;
	}
// x-coordinate of reference point
	x = (pIRect->left + pIRect->right - Size.cx)/2 - 1;
	x = (x < pIRect->left + 2) ? pIRect->left + 2 : x;
// y-coordinate of reference point
	int hei=(pIRect->bottom-pIRect->top)/2;
	y = pIRect->top + hei + (hei-Size.cy)/2;
// Specifies that the current background color fills the rectangle pIRect
	nOptions |= ETO_CLIPPED;
// Decreases the text border to the right
	pIRect->right -= 4;
// Writes the text in the (x, y) coordinates
	pDC->ExtTextOut(x, y, nOptions, pIRect, szBuf, strlen(szBuf), NULL);
//	CHeaderCtrl::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
LoneWanderer1 2017-11-25
  • 打赏
  • 举报
回复
引用 4 楼 schlafenhamster 的回复:
HDITEM hdi; hdi.mask=HDI_TEXT | HDI_WIDTH | HDI_FORMAT; hdi.cchTextMax=40; hdi.fmt=HDF_OWNERDRAW; hdi.cxy=rc.Width()/12; hdi.pszText="A1"; m_MyHead.InsertItem(0,&hdi);
这样是不是就不用重绘表头了?我没用过这种结构体,不是很熟悉还
schlafenhamster 2017-11-25
  • 打赏
  • 举报
回复
HDITEM hdi; hdi.mask=HDI_TEXT | HDI_WIDTH | HDI_FORMAT; hdi.cchTextMax=40; hdi.fmt=HDF_OWNERDRAW; hdi.cxy=rc.Width()/12; hdi.pszText="A1"; m_MyHead.InsertItem(0,&hdi);
LoneWanderer1 2017-11-25
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
自绘 CHeaderCtrl
我尝试了一下表头颜色的重绘,但是表头没有完成换肤,请问是什么原因啊
schlafenhamster 2017-11-25
  • 打赏
  • 举报
回复
思路是 header 里 放一个 static ,把 原来 的 列 覆盖掉
zgl7903 2017-11-25
  • 打赏
  • 举报
回复
自绘 CHeaderCtrl

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧