- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有什么有效的方法可以通过发送 LB_SETITEMDATA 消息,通过与该行相关联的数据在 WinAPI 中找到已排序 ListBox 的行?我有客户端连接到我的服务器,需要将它们的 IP 放在排序的 ListBox 中,以便用户一方面可以单击一行并与当前客户端交互,另一方面,如果客户端断开连接,它的记录会从 ListBox 中删除。我已通过 LB_SETITEMDATA 将行与 SOCKET 链接起来,以便通过单击选择客户端,但没有找到通过链接数据(而不是字符串)获取行的消息。我找到了两个 macroses,其中一个的名字和我要找的一样,但在里面我没有发现它们之间有任何显着差异。实验表明,两个macroses 中没有一个或它的消息不起作用(仅通过显示的字符串搜索是正确的)。
宏:
#define ListBox_FindString(hwndCtl, indexStart, lpszFind) ((int)(DWORD)SNDMSG((hwndCtl), LB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
#define ListBox_FindItemData(hwndCtl, indexStart, data) ((int)(DWORD)SNDMSG((hwndCtl), LB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(data)))
下一个代码在结果中显示 -1,而我期望的是 1。
g_hListBox = CreateWindowEx(WS_EX_CLIENTEDGE, "ListBox", "Clients", WS_CHILD|WS_VISIBLE|WS_VSCROLL|LBS_DISABLENOSCROLL|LBS_NOTIFY|LBS_SORT, 5, 40, 300, 500, g_hWnd, (HMENU) LB_CLIENTS, hInstance, NULL);
int a = SendMessage(g_hListBox, LB_ADDSTRING, 0, (LPARAM)"33333");
SendMessage(g_hListBox, LB_SETITEMDATA, a, 6);
int c = SendMessage(g_hListBox, LB_ADDSTRING, 0, (LPARAM)"11111");
SendMessage(g_hListBox, LB_SETITEMDATA, c, 4);
int b = SendMessage(g_hListBox, LB_ADDSTRING, 0, (LPARAM)"22222");
SendMessage(g_hListBox, LB_SETITEMDATA, b, 5);
char buf[15];
int x = 5;
MessageBox(g_hWnd, itoa(ListBox_FindItemData(g_hListBox, -1, &x), buf, 10), "Function WSAStartup return",MB_OK);
现在每次我需要按数据定义索引时,我只需将 LB_GETITEMDATA 发送到每一行,并将结果与当前数据进行比较。看起来很不合理,但是写起来很简单,可以工作。
最佳答案
我强烈建议您改用虚拟 ListBox 或虚拟 ListView,将实际数据存储在您自己的列表/数组/任何需要的内容中,并根据需要进行排序。 ListBox/ListView 只是显示列表中的内容,数据实际上并未存储在 ListBox/ListView 本身中。这样,当您需要查找某些内容时,您可以在自己的存储中查找,而不是在 UI 中查找。这也提供了性能优势,并让您更好地控制数据管理、缓存等。
关于c++ - 对象集合与ListBox行一一对应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16311156/
我是一名优秀的程序员,十分优秀!