【问题标题】:CListCtrl Does CListCtrl display only filled rows?CListCtrl CListCtrl 是否只显示填充的行?
【发布时间】:2016-08-01 01:54:30
【问题描述】:

CListCtrl 的默认行为是否仅显示当前填充有下方灰色空白区域的行数?

在我的列表中,我在固定显示区域中有可变数量的条目。当条目多于显示区域可以容纳时,垂直滑块会出现并且所有内容都正确显示。当我删除条目时,现在没有足够的空间来填充显示区域,底部的空白区域变为灰色,没有单元格网格。

我想将显示区域设置为完整的单元格网格。如果必须,我可以计算并用空行填充该区域,但我没想到这是默认行为。我本来希望 CListCtrl 的整个客户端区域永久显示为一个空单元格网格,并在顶部显示正确数量的条目。

我是否必须手动处理这个问题,或者我没有设置 CListCtrl 的某些属性?

【问题讨论】:

  • 不确定我是否理解所有内容,你能发一些图片吗?
  • 您要求的默认行为非常尴尬。如果客户区不是单元格高度的倍数,默认行为应该是什么?在这种情况下,剩余的空间是否应该变灰?控件是否应该显示部分行,而不显示随附的垂直滚动条?它应该显示带有垂直滚动条的部分行吗?在这种情况下滚动条应该如何表现?这些都不是很直观,实现的默认行为确实是最不意外的路线。
  • 我想你误解了我的意思。我不是在谈论可能留在底部的部分行,我是在谈论当前未填充数据的所有空间。如果我有一个显示 40 行的 CListCtrl,并且只有前 10 行有数据,那么它们下面的 30 行只是一个与对话框背景相同的灰色块。我不确定这个网站如何处理图片,但我在 Dropbox 上托管了一个屏幕截图来说明我的意思:link
  • 我已经完成了这项工作,但使用 clutz 代码添加空行“”,如果行为应该已经是这样就不好了,你必须处理选择!您实际上可以在显示之外添加行,只要下部单元格中没有数据,VScrollbar 就不会出现。所以滚动条似乎基于数据而不是显示,并照顾你的观点。让我质疑的是,当列表首次显示时,在输入任何数据之前,它会完全按照我的意愿显示一个空网格。当我填充数据时,灰色区域会出现并持续存在,并根据数据进行调整。

标签: c++ mfc clistctrl


【解决方案1】:

您所描述的列表视图控件的默认行为:

以下是相关代码片段:

m_List.InsertColumn(0, L"Col 1", 0, 100);
m_List.InsertColumn(1, L"Col 2", 0, 100);
m_List.InsertItem(0, L"Item 1");
m_List.InsertItem(1, L"Item 2");
ListView_SetExtendedListViewStyle(m_List, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

您只需要确保使用当前版本的通用控件。

【讨论】:

  • 感谢弗拉德提供的信息,我担心可能是这种情况。似乎只是我的老化设置不再可靠。我得小心这个。
猜你喜欢
  • 2010-11-09
  • 2018-07-31
  • 2015-02-23
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多