2016-09-14 56 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

谢谢,它给了我一个全新的视角。 –