我希望将CListCtrl控件的任何单元格的字体更改为粗体。有人能告诉我们如何为CList Ctrl做这件事吗?
我已经为CTreeCtrl这样做了,就像这样
pTC->SetItemState(hItemCur, TVIS_BOLD, TVIS_BOLD);
对于CListCtrl,我们有类似的东西吗?
提前谢谢。
发布于 2015-07-06 15:12:45
如果可以使用CMFCListCtrl (VS2008、SP1和up),则可以从它派生类并重写OnGetCellFont。然后返回粗体字体(您可以创建自己的字体或返回AFX_GLOBAL_DATA::fontBold):
HFONT CMyListCtrl::OnGetCellFont( int nRow, int nColumn, DWORD dwData /*= 0*/ )
{
if (UseBoldFont(/* params */))
{
return GetGlobalData()->fontBold;
}
return NULL;
}
如果您必须坚持使用普通的旧CListCtrl,最简单的方法是使用自定义绘图,在那里您可以根据自己的需要调整绘图过程。不要把它和业主抽签混为一谈,在那里你必须自己画。
这是一篇文章解释了在CListCtrl中使用自定义绘图的基本知识。
发布于 2015-07-07 06:27:03
添加
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomdraw)
到你的信息地图上。
现在,您可以在此函数中任意修改项。在这里,您可以更改对齐、字体、背景色、文本颜色、.,还可以将项设置为粗体-> 示例。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
}
https://stackoverflow.com/questions/31245713
复制相似问题