C ++ Win32 - 跟踪私人聊天的ListView项目

时间:2016-09-14 01:07:43

标签: c++ listview winapi

好吧,我正在做的是为我的朋友创建一个加密的聊天室,然后我就乱搞。

我想进行私聊,您可以在列表视图上右键单击他们的名字并发送消息。

目前,我是一个包含所有“用户”信息的结构,例如名称,登录时间和列表视图编号。但是当用户断开连接时,列表视图编号变得不正确,因为它将所有人都降低了一个。

我如何能够将用户与“列表视图”项目“绑定”?这样,无论有多少人登录/关闭我点击他们的名字,它都会PM那个人。 (我试图使用LVN_ITEMCHANGE因为我认为iItem会改变,但它不符合我的经验)

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

1 个答案:

答案 0 :(得分:3)

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

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

  • 如果要将新用户添加到ListView,请在使用LVM_INSERTITEM消息之前动态分配数据结构并将指针指定给LVITEM::lParam字段。

    < / LI>
  • 如果要访问特定用户的数据,请使用LVM_GETITEM消息检索该列表项LVITEM,然后键入其lParam以访问您的数据结构

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

    < / LI>

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