VC++列表框控件问题!会的进来下

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VC++列表框控件问题!会的进来下相关的知识,希望对你有一定的参考价值。

LVCOLUMN column;
// 指定LVCOLUMN结构中的pszText、fmt、cx域有效
column.mask = LVCF_TEXT|LVCF_FMT|LVCF_WIDTH;
// 设置有效的域的属性
column.fmt = LVCFMT_CENTER; // 指定文本居中显示
column.cx = 100; // 指定此栏的宽度
column.pszText = "映象名称"; // 指定此栏显示的文本

// 添加一个新的专栏
::SendMessage(hWndList, LVM_INSERTCOLUMN, 0, (LPARAM)&column);
// 再添加一个专栏
column.pszText = "PID";
column.cx = 50;
::SendMessage(hWndList, LVM_INSERTCOLUMN, 1, (LPARAM)&column);

上面的是一小部分代码!在第一个SendMessage之前,就给column.fmt赋了值,然后运行到第一个SendMessage那我设置的第一列(映象名称)中的文本应该是居中的才对啊!
但为什么不是呢?反而是PID那一列是居中的!为什么会这样?

列表视图控件的第一列不能居中追问

这个是规定的吗?

追答

是的,除非重绘,重绘比较麻烦.

参考技术A 你如何想居中的话可以重绘表头

VC\MFC界面怎么设置列表框第一列文字居中,其他列的文本左对齐

希望各位能够明白我的意思,没有满意答案,继续寻找其他回答,继续寻求帮助,详细具体,财富可加

添加一个不可见的第一列(宽度设为0)
实际的第一列放在第二列的位置,并设置居中。

或者这样更直接:
InsertColumn时指定第一列的nCol=1,即nCol=0的列不存在也可以。
int InsertColumn(int nCol, LPCTSTR lpszColumnHeading,
int nFormat = LVCFMT_LEFT, int nWidth = -1, int nSubItem = -1);追问

不可见怎么设置,宽度设置为0的话第一列中的文字岂不是无法显示出来了?

追答

意思是将需要添加到第一列的内容直接放到第二列。
回复2L:
表头的垂直线?
CHeaderCtrl * pHeader=ctrl.GetHeaderCtrl();
pHeader-> ModifyStyle(0, CCS_NORESIZE, TRUE);
或者简单的从CHeaderCtrl派生一个类来处理,实现第一列不可拖动,其他列可以拖动。

自绘?小题大做了吧。

参考技术A InsertColumn(0, "第一列",LVCFMT_CENTER, 100);
InsertColumn(0, "第二列",LVCFMT_LEFT, 100);
参考技术B 1楼的以假乱真还是有问题。这需要表格不能有垂直线,但是表头的垂直线你怎么去掉?
我的建议:自绘。自绘真的不难,不要因为害怕麻烦而不去碰他,当你学会了自绘,任何界面样式你都可以。
参考技术C 你插入列标题的时候需要使用到m_list.InsertColumn(i, strHeader[i], LVCFMT_CENTER, nWidth[i]);其中m_list是你的列表框的变量名,i是列数,strHeader[i]是第i列的标题,LVCFMT_CENTER就是列标题居中的意思,nWidth[i]是第i列的宽度 参考技术D 插入列表栏目的时候可以指定。

以上是关于VC++列表框控件问题!会的进来下的主要内容,如果未能解决你的问题,请参考以下文章

列表框:如何根据列表框选择显示子对话框?

VC++中如何用tab选中单选框控件?

VC/MFC中的CComboBox控件使用详解

VC 如何获取一个控件内的字体

请问下,java中如何将列表框放进滚动条(就是给列表框加上滚动条)?

如何解决列表框控件宽度不够的问题