CListCtrl:如何在同一列上使用不同的字体时获取列宽?

时间:2009-12-04 02:20:31

标签: mfc clistctrl custom-draw

我从CListCtrl派生了一个名为CListCtrlCustomDraw的类,并使用NM_CUSTOMDRAW处理程序绘制列表。
问题是我对所选项目和未选择的项目有不同的字体,它们是列表控件的成员变量,但是当我使用时

m_list.SetColumnWidth(iCol, LVSCW_AUTOSIZE); 
int nTextWidth = m_list.GetColumnWidth(iCol);
m_list.SetColumnWidth(iCol, LVSCW_AUTOSIZE_USEHEADER);
int nColTitleWidth = m_list.GetColumnWidth(iCol); 
m_list.SetColumnWidth(iCol,max(nTextWidth, nColTitleWidth));

计算列宽,列表使用未选择项的字体,而不是宽 作为所选项目的字体(粗体字体),因此会有一些内容无法在中显示 选择的项目,即使他们有相同的内容。

我可以设置使用哪种字体来计算列宽吗?
我试过在上面的代码之前设置字体,但是没有效果 任何建议将不胜感激。

1 个答案:

答案 0 :(得分:3)

您需要手动管理列的宽度。使用GetTextExtentPoint32计算最大字体中最长字符串的大小,并设置列宽。