如何动态更新 C++ ListView?

Posted

技术标签:

【中文标题】如何动态更新 C++ ListView?【英文标题】:How do I dynamically update a 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? 我建议您在特定事件发生时更新列表。想必你知道那件事发生了什么。 【参考方案1】:

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

【讨论】:

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

以上是关于如何动态更新 C++ ListView?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用json动态转换listview静态?

Android零基础入门第44节:ListView数据动态更新

Android Studio 中的动态 ListView:选择随机元素并更新列表视图

Android AlertDialog 动态更新里面的ListView数据

jquery mobile listview使用ajax动态加载后,跳转到其他页面返回时数据没有保存如何解决?

在ListView中动态更新列表元素高度