C++ Win32 - 跟踪私有(private)聊天的 ListView 项目

标签 c++ listview winapi

好吧,我正在做的是为我和我的 friend 们创建一个加密的聊天室。

我想进行私有(private)聊天,您可以在 ListView 中右键单击他们的名字并向他们发送消息。

目前我的结构包含所有“用户”信息,如姓名、登录时间和 ListView 编号。但是,当用户断开连接时,该 ListView 编号会变得不正确,因为它会将每个人都向下移动一个。

我如何能够从本质上将用户“绑定(bind)”到 ListView 项目?这样,无论有多少人登录/注销,当我点击他们的名字时,它都会向那个人发送 PM。 (我尝试使用 LVN_ITEMCHANGE,因为我认为 iItem 会改变,但它并没有改变我的经验)

**我的想法* 我的想法是在名为“token”的 ListView 项目中添加一个随机字符字段,这样当有人单击名称时,它会找到唯一的“token”并以这种方式执行。但也许他们是一种更简单的方法,所以这就是我问的原因。

最佳答案

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

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

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

  • 当您想要访问特定用户的数据时,使用 LVM_GETITEM 检索该列表项的 LVITEM消息,然后对其 lParam 进行类型转换以访问您的数据结构。

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

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

关于C++ Win32 - 跟踪私有(private)聊天的 ListView 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39481079/

相关文章:

c++ - copy() 不能用于初始化容器吗?

C++ OpenGL 线框立方体渲染空白

java - 努力让我的 ListView 正常工作

android - android 中使用 arraylist 项的 ListView 问题

python - 通过 WMI 脚本关闭 Windows 机器

c++ - Qt Creator 如何隐藏每条评论?

android - ListView 和 ListView 中的按钮

c++ - SetPixelFormat() 中的第三个参数对于 OpenGL 上下文创建有什么意义?

c++ - 杀死正在执行 memcpy 的线程是否安全?

c++ - 如何让 Visual Studio 调试器在没有焦点的情况下中断