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派生一个类来处理,实现第一列不可拖动,其他列可以拖动。
自绘?小题大做了吧。
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++列表框控件问题!会的进来下的主要内容,如果未能解决你的问题,请参考以下文章