2016-09-14 55 views
1

好吧所以我在做什麼正在爲我的朋友加密聊天室,我惹周圍C++的Win32 - 跟蹤的ListView項私人聊天

我想作一個私人聊天,你可以右鍵點擊。他們的名字在列表視圖上並向他們發送消息。

目前我是一個包含所有「用戶」信息(如姓名,登錄時間和列表視圖編號)的結構。但是,當用戶斷開連接時,該列表視圖號碼變得不正確,因爲它將每個人都向下移動一個。

我將如何能夠將用戶基本上「綁定」到列表視圖項目?這樣,無論有多少人登錄/關閉,當我點擊他們的名字時,它都會在那個人的PM下面。 (我試圖使用LVN_ITEMCHANGE,因爲我認爲iItem會改變,但它不會對我的體驗)

**我的想法* 我的想法是在名爲「token」的ListView項目中添加一個隨機字符字段當有人點擊該名稱時,它會找到唯一的「標記」,並以此方式進行。但是,也許他們是一個更簡單的方法,所以這就是爲什麼我問。

回答

3

您的數據結構不應該跟蹤所有的ListView項目。這只是額外的數據。

您的ListView可以將每個列表項與數據結構關聯。該LVITEM結構具有用於處理用戶定義的值的lParam場:

  • 當你想使用LVM_INSERTITEM之前的新用戶該指針添加到ListView,動態地分配你的數據結構和分配給LVITEM::lParam場信息。

  • 當你要訪問一個特定用戶的數據,檢索列表項的LVITEM使用LVM_GETITEM消息,然後鍵入鑄其lParam來訪問你的數據結構。

  • 如果要刪除用戶,只需使用LVM_DELETEITEM消息刪除該列表項,然後使用LVN_DELETEITEM通知釋放關聯的數據結構。

另外,使用在虛擬模式ListView控件通過LVS_OWNERDATA窗口樣式(見Virtual List-View StyleHow to Use Virtual List-View Controls),然後你不需要使用LVITEM::lParam場都沒有。將數據結構存儲在單獨的陣列/容器中,然後使用LVN_GETDISPINFO通知將顯示數據僅在需要數據時向ListView提供。從陣列/容器中添加/刪除用戶時,只需使用LVM_SETITEMCOUNT消息來更新ListView的項目數以匹配新的陣列/容器數。這樣,ListView項目和容器項目之間始終存在直接關係。讓LVN_GETDISPINFO告訴你要訪問哪個數組/容器項。

+0

謝謝,它給了我一個全新的視角。 –