2015-02-10 35 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