【问题标题】:Auto resizing column widths in a CListCtrl在 CListCtrl 中自动调整列宽
【发布时间】:2011-02-06 01:03:32
【问题描述】:

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

【问题讨论】:

    标签: mfc resize clistctrl


    【解决方案1】:

    您是否启用了“无滚动”选项?默认情况下(“No Scroll”选项关闭),如果项目太长,则会出现滚动条。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 是的,这正是我的意思。感谢您的回复,如果我找不到合适的算法,我将处理 OnSize() 手动调整大小并要求读者调整窗口大小。
      【解决方案3】:

      自动调整列大小很容易:

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

      这将优化列。

      【讨论】:

      • 嘿,我试过了,它似乎运作良好 :) :) 非常感谢你的回复 dwo :D
      • 一个小问题 dwo,我从未听说过 HeaderControl。究竟是什么???非常感谢!!!
      • 标题控件是列表控件的上半部分,其中包含列标题。
      • 使用LVSCW_AUTOSIZE 将根据内容而不是标题文本调整大小。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 2023-03-29
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      相关资源
      最近更新 更多