icesord 2023-08-16 20:22 采纳率: 0%
浏览 6

MFC_ListCtrl垂直居中

MFC的ListCtrl控件(报表视图),如何使内容垂直居中(不是水平居中)显示?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-16 22:04
    关注

    【以下回答由 GPT 生成】

    在MFC的ListCtrl控件中实现垂直居中显示内容的方法如下:

    1. 给ListCtrl控件添加响应NM_CUSTOMDRAW消息的函数。
    2. 在该函数中,通过获取绘图DC和相应的绘图矩形,来自定义绘制ListCtrl的单元格。
    3. 在自定义绘制的过程中,使用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控件时,就可以实现垂直居中显示内容的效果了。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 8月16日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀