c++ Win32 -跟踪列表视图项目的私人聊天
C++ Win32 - Tracking ListView items for private chat
好的,我要做的是创建一个加密聊天室,让我和我的朋友们在里面乱搞。
我想做一个私人聊天,你可以在列表视图中右键单击他们的名字并给他们发消息。
目前我使用一个包含所有"用户"信息的结构,如姓名、登录时间和列表视图号。但是当用户断开连接时,这个列表视图编号就不正确了,因为它将每个人都向下移动一个。
我怎样才能将用户"绑定"到列表视图项上?这样,无论有多少人登录/注销,当我点击他们的名字时,它都会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
告诉你要访问哪个数组/容器项
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 欧拉项目#8答案是大以获得有效答案
- 从链接列表c++中删除一个项目
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 既然存在危险,为什么项目要使用-I include开关
- cmake在我的项目中所需的所有静态库都不成功
- QT通过C++添加映射QML项目
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在linux上调试巨大的C++项目
- 在其他文件中创建类时在 c++ 项目中不起作用
- 使外部项目可用于find_package CMake
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- 如何维护资源管理器项目视图中当前可见的项目列表
- 错误-我无法在VS2019中打开新的Qt项目
- c++ Win32 -跟踪列表视图项目的私人聊天