CListCtrl将字体样式设置为粗体

时间:2015-07-06 12:21:35

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

我想将CListCtrl控件的任何单元格的字体更改为粗体。任何人都可以告诉如何为CList Ctrl。

执行此操作

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

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

我们对CListCtrl有类似的东西吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果您可以使用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,最简单的方法是使用Custom Draw,您可以根据自己的需要调整绘图过程。不要将它与Owner Draw混淆,你必须自己全部绘图。

Here's an article解释了使用CListCtrl自定义绘图的基础知识。

答案 1 :(得分:1)

添加

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
}