【问题标题】:CListCtrl set font style to boldCListCtrl 将字体样式设置为粗体
【发布时间】:2015-09-23 14:12:24
【问题描述】:

我想将 CListCtrl 控件的任何单元格的字体更改为粗体。谁能告诉 CList Ctrl 怎么做。

我已经为 CTreeCtrl 做了这个,像这样

pTC->SetItemState(hItemCur, TVIS_BOLD, TVIS_BOLD);

CListCtrl 有类似的东西吗?

提前致谢。

【问题讨论】:

标签: visual-studio visual-c++ mfc clistctrl


【解决方案1】:

如果您可以使用CMFCListCtrl(VS2008 SP1 及更高版本),您可以从中派生一个类并覆盖OnGetCellFont。从那里返回你的粗体字体(你可以创建自己的或返回 AFX_GLOBAL_DATA::fontBold):

HFONT CMyListCtrl::OnGetCellFont( int nRow, int nColumn, DWORD dwData /*= 0*/ )
{
    if (UseBoldFont(/* params */))
    {
        return GetGlobalData()->fontBold;
    }
    return NULL;
}

如果您必须坚持使用普通的旧 CListCtrl,最简单的方法是使用自定义绘图,您可以根据自己的需要调整绘图过程。不要将其与所有者绘制混淆,您必须自己完成所有绘制。

Here's an article 解释使用 CListCtrl 的 Custom Draw 的基础知识。

【讨论】:

    【解决方案2】:

    添加

    ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomdraw)
    

    到您的消息映射。

    现在您可以在此功能中随意修改项目。在这里您可以更改对齐方式、字体、背景颜色、文本颜色、[...],并且您可以将项目设置为粗体 -> example。 IMO 的最佳方法是存储指向结构、类的指针,或者只是在控件中项目的 LPARAM 中存储一个标志。此函数适用于 CListCtrl 和 CTreeCtrl。
    这是一个带有标志的示例:

    enum ColorFlags
    {
        F_COLOR_BLACK = 0x1,
        F_COLOR_WHITE = 0x2
        //and more...
    };
    
    enum CustomColors
    {
        COLOR_BLACK = RGB(0, 0, 0),
        COLOR_WHITE = RGB(255, 255, 255)
    };
    
    afx_msg
    void CMyListCtrl::OnCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
    {
        NMLVCUSTOMDRAW *pDraw = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
        switch (pDraw->nmcd.dwDrawStage)
        {
            case CDDS_PREPAINT:
                *pResult = CDRF_NOTIFYITEMDRAW; //Do not forget this...
                break;
            case CDDS_ITEMPREPAINT:
            {
                switch (pDraw->nmcd.lItemlParam) //Extract color from flags
                {
                    case F_COLOR_BLACK:
                    {
                        pDraw->clrText = COLOR_BLACK;
                    } break;
                    case F_COLOR_WHITE:
                    {
                        pDraw->clrText = COLOR_WHITE;
                    } break;
                    default:
                        break;
                } //switch
            } break;
        } //switch
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      相关资源
      最近更新 更多