CListCtrl m_listLog;
m_listLog.InsertColumn(0, "Name", LVCFMT_CENTER, 200);
m_listLog.InsertColumn(1, "Resource", LVCFMT_CENTER, 200);
int nRow(0);
nRow = m_listLog.InsertItem(0, "str00");
m_listLog.SetItemText(nRow, 1, "str01");
nRow = m_listLog.InsertItem(0, "str10");
m_listLog.SetItemText(nRow, 1, "str11");
第二列开始,都可居中, 为什么第一列不行呢?
20 个解决方案
#1
可以先删除第一列,后来的第一列就可以居中显示了
#2
删除后的第二列就相当于第一列,在写程序时序号还是0
#3
这是CListCtrl的bug吗?
#4
帮顶。
#5
先删除第一列,如此怪!
#6
先记下
#7
自绘,想居那里都可
DrawText()
DrawText()
#8
我处理的时候
让第一列的宽度为1
然后填充的就看不出来
第二列就能居中
让第一列的宽度为1
然后填充的就看不出来
第二列就能居中
#9
nRow = m_listLog.InsertItem(0, "str00");
m_listLog.SetItemText(nRow, 1, "str01");
nRow = m_listLog.InsertItem(0, "str10");把0该修改为1试下。。
m_listLog.SetItemText(nRow, 1, "str11");
m_listLog.SetItemText(nRow, 1, "str01");
nRow = m_listLog.InsertItem(0, "str10");把0该修改为1试下。。
m_listLog.SetItemText(nRow, 1, "str11");
#10
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的列。
下面是实例代码:
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);
#11
这个没有为什么
想剧中的话就重绘吧
想剧中的话就重绘吧
#12
或者考虑把索引为0的列宽度设置为0,然后冻结起来。
实现隐藏效果,然后界面上第二列就取代了第一列的位置。
实现隐藏效果,然后界面上第二列就取代了第一列的位置。
#13
mark一下
#14
重绘好像也改不了
#15
按12楼的方法试下,把第0列的Width设置为0,然后让第0列也不能拖动,也就是隐藏第0列..这样就可以设置后面的列居中了吧..
#16
我说的重绘表头
#17
LVCOLUMN lvc;
lvc.mask = LVCF_FMT;
m_list2.GetColumn(0, &lvc);
lvc.fmt &= ~LVCFMT_JUSTIFYMASK;
lvc.fmt |= LVCFMT_CENTER;
m_listLayer.SetColumn(0, &lvc);
lvc.mask = LVCF_FMT;
m_list2.GetColumn(0, &lvc);
lvc.fmt &= ~LVCFMT_JUSTIFYMASK;
lvc.fmt |= LVCFMT_CENTER;
m_listLayer.SetColumn(0, &lvc);
#18
这个方法缺点在于:单击的时候会回到左边
#19
搜索半天,也就那么几个解决方法。
#20
找微软去
#21
#1
可以先删除第一列,后来的第一列就可以居中显示了
#2
删除后的第二列就相当于第一列,在写程序时序号还是0
#3
这是CListCtrl的bug吗?
#4
帮顶。
#5
先删除第一列,如此怪!
#6
先记下
#7
自绘,想居那里都可
DrawText()
DrawText()
#8
我处理的时候
让第一列的宽度为1
然后填充的就看不出来
第二列就能居中
让第一列的宽度为1
然后填充的就看不出来
第二列就能居中
#9
nRow = m_listLog.InsertItem(0, "str00");
m_listLog.SetItemText(nRow, 1, "str01");
nRow = m_listLog.InsertItem(0, "str10");把0该修改为1试下。。
m_listLog.SetItemText(nRow, 1, "str11");
m_listLog.SetItemText(nRow, 1, "str01");
nRow = m_listLog.InsertItem(0, "str10");把0该修改为1试下。。
m_listLog.SetItemText(nRow, 1, "str11");
#10
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的列。
下面是实例代码:
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);
#11
这个没有为什么
想剧中的话就重绘吧
想剧中的话就重绘吧
#12
或者考虑把索引为0的列宽度设置为0,然后冻结起来。
实现隐藏效果,然后界面上第二列就取代了第一列的位置。
实现隐藏效果,然后界面上第二列就取代了第一列的位置。
#13
mark一下
#14
重绘好像也改不了
#15
按12楼的方法试下,把第0列的Width设置为0,然后让第0列也不能拖动,也就是隐藏第0列..这样就可以设置后面的列居中了吧..
#16
我说的重绘表头
#17
LVCOLUMN lvc;
lvc.mask = LVCF_FMT;
m_list2.GetColumn(0, &lvc);
lvc.fmt &= ~LVCFMT_JUSTIFYMASK;
lvc.fmt |= LVCFMT_CENTER;
m_listLayer.SetColumn(0, &lvc);
lvc.mask = LVCF_FMT;
m_list2.GetColumn(0, &lvc);
lvc.fmt &= ~LVCFMT_JUSTIFYMASK;
lvc.fmt |= LVCFMT_CENTER;
m_listLayer.SetColumn(0, &lvc);
#18
这个方法缺点在于:单击的时候会回到左边
#19
搜索半天,也就那么几个解决方法。
#20
找微软去