好吧,我正在做的是为我的朋友创建一个加密的聊天室,然后我就乱搞。
我想进行私聊,您可以在列表视图上右键单击他们的名字并发送消息。
目前,我是一个包含所有“用户”信息的结构,例如名称,登录时间和列表视图编号。但是当用户断开连接时,列表视图编号变得不正确,因为它将所有人都降低了一个。
我如何能够将用户与“列表视图”项目“绑定”?这样,无论有多少人登录/关闭我点击他们的名字,它都会PM那个人。 (我试图使用LVN_ITEMCHANGE因为我认为iItem会改变,但它不符合我的经验)
**我的想法* 我的想法是在ListView项目中添加一个名为“token”的随机字符字段,当有人点击该名称时,它会找到唯一的“令牌”并按此方式执行。但也许他们是一种更简单的方式,所以这就是我要问的原因。
答案 0 :(得分:3)
您的数据结构不应跟踪ListView项 。这只是额外的数据。
您的ListView可以将每个列表项与数据结构相关联。 LVITEM
结构具有lParam
字段,用于处理用户定义的值:
如果要将新用户添加到ListView,请在使用LVM_INSERTITEM
消息之前动态分配数据结构并将指针指定给LVITEM::lParam
字段。
如果要访问特定用户的数据,请使用LVM_GETITEM
消息检索该列表项LVITEM
,然后键入其lParam
以访问您的数据结构
如果要删除用户,只需使用LVM_DELETEITEM
消息删除该列表项,然后使用LVN_DELETEITEM
通知释放相关的数据结构。
或者,通过LVS_OWNERDATA
窗口样式在虚拟模式下使用ListView(请参阅Virtual List-View Style和How to Use Virtual List-View Controls),然后您无需使用LVITEM::lParam
现场。将数据结构存储在一个单独的数组/容器中,然后使用LVN_GETDISPINFO
通知仅在需要数据时才向ListView提供显示数据。当您从阵列/容器中添加/删除用户时,只需使用LVM_SETITEMCOUNT
消息更新ListView的项目计数以匹配新的阵列/容器计数。这样,ListView项和容器项之间始终存在直接关系。让LVN_GETDISPINFO
告诉您要访问的数组/容器项。