2015-02-10 38 views
0

我正在寻找插入数据到一个事件(例如收到新消息)的ListView,而不是通过点击按钮。这意味着在整个软件运行期间,行将不断添加和删除。如何动态更新C++ ListView?

我该如何去做这件事?我可以在创建ListView时添加行,例如

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

ListView_InsertItem(list, &lvi); 

但我不知道哪个窗口消息处理程序我需要把它放在这里,如果我想要更新的话。例如。它是否在WM_PAINT? WM_NOTIFY?等。

我使用没有MFC的Win32 listview。

提前致谢!

+0

您需要创建一个计时器,并在该计时器触发时进行修改 – 2015-02-10 13:30:02

+0

[UpdateWindow](https://msdn.microsoft.com/en-us/library/dd145167(v = vs.85).aspx)也许? – Axalo 2015-02-10 13:31:21

+0

@Axalo为什么要调用'UpdateWindow'? – 2015-02-10 13:33:11

回答

0

你在想这个。只要您的计时器触发(或其他事件),只需修改列表。其余列表视图控件知道它需要重新绘制,所以会使自己失效。这将引发一个绘画循环,因此列表视图窗口将被要求绘制自己。

+0

好的,谢谢你的帮助David。我明白。但是,我试图在同一个类中的方法的下一个元素处调用insert,并且仍然无法更新ListView。只要我使用与创建列相同的方法进行操作,就可以将元素添加到ListView中,而不会出现任何问题。我不确定会出现什么问题,我正在使用用于创建窗口的全局句柄HWND。 – f9073341 2015-02-10 14:32:43

+0

您可能在调用ListView_InsertItem时出现错误。首先添加问题中不存在的错误检查。 – 2015-02-10 14:36:42

+0

有趣。当我尝试添加一个iItem = 1的元素时,宏返回0.应该已经有一个项目在我创建列的位置。原始项目在表单中保持不变,但新项目不会被添加。这是一个显示问题? – f9073341 2015-02-10 14:56:22