CListCtrl 如何调整列的位置

kenshu 2010-09-16 04:13:41
(VC6)

默认是A,B,C在个列

用户拖动为 C,A,B之后,我已经把它们记下来,下次运行时,我如何调整C列到最前面?

CListCtrl.InsertColumn(0,'A')//这是大致的意思,不是真实代码
CListCtrl.InsertColumn(1,'B')
CListCtrl.InsertColumn(2,'C')

InsertColumn之后,如何用代码修改C的位置到最前面?

谢谢!
...全文
188 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ynwlgh 2010-09-17
  • 打赏
  • 举报
回复
CListCtrl::SetColumn

BOOL SetColumn(int nCol,const LVCOLUMN* pColumn)

返回值:如果成功,则返回非零值,否则为0。

参数: nCol 要设置属性的列的索引值。
pColumn 包含新列属性的LVCOLUMN结构的地址,如联机文档“平台SDK” 中所述。该结构的mask成员指定了要设置属性的列。如果mask成员指定为LVCF_TEXT值,那么该结构的pszText成员则为以空字符为终止符的字符串,并且该结构的cchTextMax成员将被忽略。

说明:设置列表视图列的属性。





VC/MFC列表CListCtrl类的LVCOLUMN和LVITEM详解
http://blog.csdn.net/hahalxp/archive/2010/07/02/5709613.aspx



你试下.我没有用过这种方法...
kenshu 2010-09-17
  • 打赏
  • 举报
回复
回楼上,A/B/C只是一个概数,实际有20+列.

我实际已经记在文件上了(当然也取得出来),问题是这个CListCtrl在InsertColumn后,不知道如何用代码修改每一列的位置(比如把C列放到最前面)

---------------------------------------------------------

最后还是用了3楼的方法,按保存后的次序创建列.当然其它很多代码就要一起修改了,因为原来的SetItemText都是用SetItemText(nItem,nSubItem/*这个要改很多地方了*/,"text")

结贴,谢谢大家
hztj2005 2010-09-16
  • 打赏
  • 举报
回复
笨方法:
你写三段代码,对应三种秩序:

if(order==1){

}else if(order==2){

}else if(order==3){

}

用户拖动后,记录一个变量order,写入磁盘文件
QQ282881515 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kenshu 的回复:]
#3有没有更好的方法?

我保存时是用

CListCtrl.GetHeaderCtrl()->GetItemRect(i,&CRect)
取得各个列的left

但好像没有SetItemRect或类似的函数

-----------------------------------------------------
#4

不是这个意思,我保存下来了,也取得出来,……
[/Quote]
额 机子上没编译环境 试 额 等待高人
kenshu 2010-09-16
  • 打赏
  • 举报
回复
说那个方法麻烦,是因为涉及多个地方,InsertItem/SetItemText要用到索引的问题。

谢谢!
kenshu 2010-09-16
  • 打赏
  • 举报
回复
#3有没有更好的方法?

我保存时是用

CListCtrl.GetHeaderCtrl()->GetItemRect(i,&CRect)
取得各个列的left

但好像没有SetItemRect或类似的函数

-----------------------------------------------------
#4

不是这个意思,我保存下来了,也取得出来,但不知道代码如何将它调到最前面.

---------------------------------

当然最坏的方法是

CListCtrl.InsertColumn(0,SC)
CListCtrl.InsertColumn(1,SA)
CListCtrl.InsertColumn(2,SB)

但各个地方改动太大了.

谢谢!
QQ282881515 2010-09-16
  • 打赏
  • 举报
回复
CListCtrl.InsertColumn(0,'A')//这是大致的意思,不是真实代码
CListCtrl.InsertColumn(1,'B')
CListCtrl.InsertColumn(2,'C')
上边的'A','B','C'定义为变量。。
CString sA, SB, SC;
SA,SB,SC,的值是从.INI文件里边读取的。。。

CListCtrl.InsertColumn(0,SA)//这是大致的意思,不是真实代码
CListCtrl.InsertColumn(1,SB)
CListCtrl.InsertColumn(2,SC)
fandh 2010-09-16
  • 打赏
  • 举报
回复
最差是删除后重新添加!
kenshu 2010-09-16
  • 打赏
  • 举报
回复
我已经记录了,// ColumnPos = C,A,B

问题是,我不知道如何将第三列调到最前面去

比如 SetColumn一类的函数?具体应该如何设置?


谢谢!
QQ282881515 2010-09-16
  • 打赏
  • 举报
回复
(VC6)

默认是A,B,C在个列

用户拖动为 C,A,B之后,我已经把它们记下来,下次运行时,我如何调整C列到最前面?


你说的下次启动是不是要记住用户拖动的CAB顺序,将默认的ABX覆盖掉?
要是这样的话你就在

CListCtrl.InsertColumn(0,'A')//这是大致的意思,不是真实代码
CListCtrl.InsertColumn(1,'B')
CListCtrl.InsertColumn(2,'C')之前读取.INI配置文件吧。。。这个.ini文件用于记录用户上次的配置

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧