MFC的ListCtrl控件(报表视图),如何使内容垂直居中(不是水平居中)显示?
1条回答 默认 最新
关注 【以下回答由 GPT 生成】
在MFC的ListCtrl控件中实现垂直居中显示内容的方法如下:
- 给ListCtrl控件添加响应NM_CUSTOMDRAW消息的函数。
- 在该函数中,通过获取绘图DC和相应的绘图矩形,来自定义绘制ListCtrl的单元格。
- 在自定义绘制的过程中,使用DrawText函数绘制文本,并使用DT_VCENTER参数来实现垂直居中显示。
以下是一个示例代码:
void CMyListView::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) { NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR); *pResult = CDRF_DODEFAULT; if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage) { *pResult = CDRF_NOTIFYITEMDRAW; } else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage) { *pResult = CDRF_NOTIFYSUBITEMDRAW; } else if (CDDS_SUBITEM | CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage) { // 获取绘图DC和绘图矩形 CDC* pDC = CDC::FromHandle(pLVCD->nmcd.hdc); CRect rect; m_listCtrl.GetSubItemRect(pLVCD->nmcd.dwItemSpec, pLVCD->iSubItem, LVIR_LABEL, rect); // 获取文本 LVITEM lvItem; lvItem.iItem = pLVCD->nmcd.dwItemSpec; lvItem.iSubItem = pLVCD->iSubItem; lvItem.mask = LVIF_TEXT; CString strText; m_listCtrl.GetItem(&lvItem); strText = lvItem.pszText; // 绘制垂直居中文本 pDC->SetTextColor(RGB(0, 0, 0)); pDC->SetBkMode(TRANSPARENT); pDC->DrawText(strText, rect, DT_LEFT | DT_VCENTER | DT_SINGLELINE); *pResult = CDRF_SKIPDEFAULT; } }
在对应的消息映射中添加响应函数:
ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST_CTRL, &CMyListView::OnCustomDraw)
这样,在使用MFC的ListCtrl控件时,就可以实现垂直居中显示内容的效果了。
【相关推荐】
- 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/191709
- 这篇博客也不错, 你可以看下设置MFC中的ListCtrl控件的列宽固定不可变
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥15 如何让企业微信机器人实现消息汇总整合
- ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
- ¥15 如何用Python爬取各高校教师公开的教育和工作经历
- ¥15 TLE9879QXA40 电机驱动
- ¥20 对于工程问题的非线性数学模型进行线性化
- ¥15 Mirare PLUS 进行密钥认证?(详解)
- ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
- ¥20 想用ollama做一个自己的AI数据库
- ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
- ¥15 请问怎么才能复现这样的图呀