You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改CListCtrl派生表头类的单元格边框?

给CListCtrl派生表头类添加自定义单元格边框

你可以在现有的自定义绘制逻辑中,完成背景与文字绘制后添加边框绘制代码。以下是修改后的完整实现,包含两种边框绘制方案供你选择:

void MyHeader::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
       
    *pResult = CDRF_DODEFAULT;

    if (pNMCD->dwDrawStage == CDDS_ITEMPREPAINT)
    {
        HDITEM hditem;
        TCHAR buffer[MAX_PATH] = { 0 };
        SecureZeroMemory(&hditem, sizeof(HDITEM));
        hditem.mask = HDI_TEXT;
        hditem.pszText = buffer;
        hditem.cchTextMax = MAX_PATH;
        GetItem(pNMCD->dwItemSpec, &hditem);
        
        CDC* pDC = CDC::FromHandle(pNMCD->hdc);
        // 保存DC原有状态,避免干扰后续绘制
        int nOldBkMode = pDC->SetBkMode(TRANSPARENT);
        COLORREF oldTextColor = pDC->SetTextColor(RGB(0, 0, 0));
        COLORREF oldBkColor = pDC->SetBkColor(RGB(251, 206, 177));

        // 绘制表头单元格背景
        pDC->FillSolidRect(&pNMCD->rc, RGB(251, 206, 177));

        // 绘制表头文字
        CString str(buffer);
        pDC->DrawText(str, CRect(pNMCD->rc), DT_VCENTER | DT_LEFT | DT_SINGLELINE);

        // 方案1:使用系统风格边框(凹陷/凸起效果)
        pDC->DrawEdge(&pNMCD->rc, EDGE_SUNKEN, BF_RECT);
        // 若要凸起风格,替换为 EDGE_RAISED

        // 方案2:自定义边框颜色(取消注释即可使用)
        // COLORREF borderColor = RGB(80, 80, 80); // 自定义边框灰度
        // pDC->SetDCPenColor(borderColor);
        // pDC->SetDCBrushColor(pDC->GetBkColor()); // 保持内部背景色
        // pDC->Rectangle(pNMCD->rc);

        // 恢复DC原有状态
        pDC->SetBkMode(nOldBkMode);
        pDC->SetTextColor(oldTextColor);
        pDC->SetBkColor(oldBkColor);

        *pResult = CDRF_SKIPDEFAULT;
    }   
}

关键说明:

  • 新增FillSolidRect主动绘制背景:因为设置SetBkColor仅改变文字背景色,跳过默认绘制后系统不会自动填充单元格背景,主动填充可避免绘制残留问题。
  • 保存并恢复DC状态:防止修改的画笔、背景模式等影响其他控件的正常绘制。
  • 边框绘制顺序:必须放在文字绘制之后,避免边框覆盖表头文字。
  • 两种边框方案:
    • DrawEdge适合快速实现符合系统视觉风格的边框,无需自定义颜色;
    • 自定义颜色方案通过设置画笔颜色绘制矩形边框,可完全控制边框色调。

内容的提问来源于stack exchange,提问作者student_qt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:46:28