问题 自动调整CListCtrl中的列宽


我该怎么做? CListCtrl 自动调整列的宽度?通常,当列表中的项目太长时,后端会从视图中消失,并且用户手动必须调整相应列的宽度。 有没有办法通过代码来做到这一点?


5255
2018-04-09 07:53


起源



答案:


自动调整列的大小很容易:

for(int i = 0;i < pListCtrl->GetHeaderCtrl()->GetItemCount();++i)
    pListCtrl->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);

这将优化列。


12
2018-04-09 19:45



嘿,我尝试了它似乎运作良好:) :)非常感谢回复dwo:D - Isuru
一个小问题dwo,我从来没有听说过HeaderControl。到底是什么?非常感谢!!! - Isuru
标题控件是列表控件的上半部分,其中包含列标题。 - dwo
运用 LVSCW_AUTOSIZE 将根据内容而不是标题文本调整大小。 - Kevin Smyth


答案:


自动调整列的大小很容易:

for(int i = 0;i < pListCtrl->GetHeaderCtrl()->GetItemCount();++i)
    pListCtrl->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);

这将优化列。


12
2018-04-09 19:45



嘿,我尝试了它似乎运作良好:) :)非常感谢回复dwo:D - Isuru
一个小问题dwo,我从来没有听说过HeaderControl。到底是什么?非常感谢!!! - Isuru
标题控件是列表控件的上半部分,其中包含列标题。 - dwo
运用 LVSCW_AUTOSIZE 将根据内容而不是标题文本调整大小。 - Kevin Smyth


你有“无滚动”选项吗?默认情况下(“无滚动”选项关闭),如果项目太长,则会出现滚动条。


1
2018-04-09 10:19





我假设你是指报告模式中的列表控件?遗憾的是,没有办法自动调整列的大小。您可以执行的操作(我在某些地方执行的操作)是在输入项目时计算列的宽度,然后处理WM_SIZE并调整列的大小。然而,这会导致用户丢失的更改,因此如果用户没有进行任何更改,您可能需要更好的算法,如跟踪,如果他没有调整大小。从UX的角度来看,它并不是很好,我只在一定数量的情况下使用它,其中行为在UI的其余部分的上下文中是有意义的。


1
2018-04-09 13:09



是的,这正是我的意思。感谢您的回复,如果我无法获得合适的算法,我只需要处理OnSize()手动调整大小并让读者调整窗口大小。 - Isuru