【问题标题】:How do I dynamically update a C++ ListView?如何动态更新 C++ ListView?
【发布时间】:2015-02-10 13:21:33
【问题描述】:

我希望将数据插入到事件(例如收到新消息)的 Listview 中,而不是通过单击按钮。这意味着在软件的整个运行期间,行将不断地添加和删除。

我该怎么做呢?我可以在创建 ListView 时添加行,例如

LVITEM lvi;
lvi.mask = LVIF_TEXT;
lvi.iItem = 0;
lvi.iSubItem = 0;
lvi.pszText = bob;

ListView_InsertItem(list, &lvi);

但如果我想即时更新,我不知道需要将它放入哪个 Windows 消息处理程序。例如。它进入 WM_PAINT 吗? WM_NOTIFY?等等。

我正在使用没有 MFC 的 Win32 列表视图。

提前致谢!

【问题讨论】:

  • 您需要创建一个计时器并在该计时器触发时进行修改
  • UpdateWindow 也许?
  • @Axalo 为什么打电话给UpdateWindow
  • 谢谢大卫,我刚刚更新了这个问题。它不需要定时,它会在某个事件发生时。但我的问题是您如何更新该特定控件。您是否需要将代码放在某个事件处理程序中?例如。 WM_NOTIFY?
  • 我建议您在特定事件发生时更新列表。想必你知道那件事发生了什么。

标签: c++ user-interface listview winapi


【解决方案1】:

你想多了。每当您的计时器触发(或其他事件)时,只需修改列表即可。其余列表视图控件知道它需要重新绘制,因此会使其自身无效。这将引发一个绘制周期,因此将要求列表视图窗口自行绘制。

【讨论】:

  • 好的,谢谢大卫的帮助。我明白。但是,我尝试从同一类中的方法调用下一个元素的插入,但它仍然无法更新 ListView。只要我使用与创建列相同的方法,我就可以毫无问题地将元素添加到 ListView。我不确定问题可能是什么,我正在使用用于创建窗口的全局句柄 HWND。
  • 您可能在调用 ListView_InsertItem 时弄错了参数。首先添加问题中不存在的错误检查。
  • 有趣。当我尝试添加 iItem = 1 的元素时,宏返回 0。在我创建列的索引处应该已经有一个项目。原始项目在表单中保持不变,但不会添加新项目。这是显示问题吗?
  • 如果您有一个空列表,就会发生这种情况。我假设有不止一个列表,而您添加到错误的列表中。这样的猜测一点都不好玩。我想我回答了你问的问题。如果你不能从这里解决它,我怀疑你需要一个新问题。
  • 你是对的,大卫。原来我是在本地初始化 HWND,但使用的是成员 HWND!
猜你喜欢
  • 1970-01-01
  • 2013-11-28
  • 2012-05-08
  • 2010-12-16
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 2013-09-16
相关资源
最近更新 更多