解决ListCtrl控件第一列文字不能居中显示的问题

原文地址:http://blog.pfan.cn/yuqiexing/50744.html (略作整理和补充)

把CListCtrl设置为Report风格,但是插入第一列的时候(InsertColumn)的时候会发现文字不能居中。即使使用了LVCFMT_CENTER,其他列都可以正常居中,但第一列仍然靠左显示。

解决方案:

(1)巧妙解决:插入第一列时宽度设置为0,弃之不用。但是这样有问题,凡是与第一列相关的一些设置将发挥不了作用,例如checkbox和icon。

(2)插入第一列后,改变它的参数:(我使用了这种方法)

LVCOLUMN lvc;
lvc.mask = LVCF_FMT;
GetColumn(0, &lvc);
lvc.fmt &=~ LVCFMT_JUSTIFYMASK; 
lvc.fmt |= LVCFMT_CENTER;
SetColumn(0, &lvc);

(3)插入第一列后,将其删除,第二列此时会充当第一列。

补充(csdn网友:VisualEleven):

MS自己搞的,第一列式不能设置格式的,MSDN里有说明:
If a column is added to a list-view control with index 0 (the leftmost column) and with LVCFMT_RIGHT or LVCFMT_CENTER specified, the text is not right-aligned or centered. The text in the index 0 column is left-aligned. Therefore if you keep inserting columns with index 0, the text in all columns are left-aligned. If you want the first column to be right-aligned or centered you can make a dummy column, then insert one or more columns with index 1 or higher and specify the alignment you require. Finally delete the dummy column.

大致意思是这样的:索引为0的列(最左边的列)如果设置了LVCFMT_RIGHT或LVCFMT_CENTER属性,上面的文字并不会右对齐或居中对齐。索引为0 的列是左对齐。如果你要想第一列右对齐或者居中对齐,你可以这样做,先保留索引为0的列,其他的列均指定右对齐或居中对齐属性,最后删除索引为0的列。

下面是实例代码:

m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
CString str[] ={_T(""), _T("AAA"), _T("BBB"), _T("CCC"), _T("DDDD"), _T("EEE")};
for(int i=0; i<sizeof(str)/sizeof(str[0]); i++)
{
    m_list.InsertColumn(i, str[i], LVCFMT_CENTER, 100);
    m_list.InsertItem(i, _T(""));
    m_list.SetItemText(i, 0, _T("AAA"));
}
m_list.DeleteColumn(0);

posted on 2013-02-22 15:36  zhuyf87  阅读(7235)  评论(0编辑  收藏  举报

导航