c++ Win32 -跟踪列表视图项目的私人聊天

C++ Win32 - Tracking ListView items for private chat

本文关键字:聊天 项目 视图 Win32 跟踪 列表 c++      更新时间:2023-10-16

好的,我要做的是创建一个加密聊天室,让我和我的朋友们在里面乱搞。

我想做一个私人聊天,你可以在列表视图中右键单击他们的名字并给他们发消息。

目前我使用一个包含所有"用户"信息的结构,如姓名、登录时间和列表视图号。但是当用户断开连接时,这个列表视图编号就不正确了,因为它将每个人都向下移动一个。

我怎样才能将用户"绑定"到列表视图项上?这样,无论有多少人登录/注销,当我点击他们的名字时,它都会PM那个人。(我试图使用LVN_ITEMCHANGE,因为我认为iItem会改变,但它没有我的经验)

* * *我的想法我的想法是在ListView项目中添加一个名为"token"的随机字符字段,这样当有人点击名称时,它会找到唯一的"token",并以这种方式进行操作。但也许这是一种更简单的方法,所以我才会问。

你的数据结构根本不应该跟踪ListView项。这只是额外的数据。

ListView可以将每个列表项与一个数据结构相关联。LVITEM结构有一个lParam字段,用于处理用户定义的值:

  • 当你想添加一个新的用户到ListView,动态分配你的数据结构,并在使用LVM_INSERTITEM消息之前将指针分配给LVITEM::lParam字段。

  • 当你想访问一个特定用户的数据时,使用LVM_GETITEM消息检索该列表项的LVITEM,然后类型转换它的lParam来访问你的数据结构。

  • 当您想要删除一个用户时,只需使用LVM_DELETEITEM消息删除该列表项,然后使用LVN_DELETEITEM通知释放相关的数据结构。

或者,通过LVS_OWNERDATA窗口样式在虚拟模式下使用ListView(参见虚拟列表视图样式和如何使用虚拟列表视图控件),然后你根本不需要使用LVITEM::lParam字段。将数据结构存储在单独的数组/容器中,然后使用LVN_GETDISPINFO通知仅在需要数据时向ListView提供显示数据。当您从数组/容器中添加/删除用户时,只需使用LVM_SETITEMCOUNT消息来更新ListView的项目计数以匹配新的数组/容器计数。这样在ListView项和容器项之间总是有一个直接的关系。让LVN_GETDISPINFO告诉你要访问哪个数组/容器项