首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象集合和ListBox行之间的一对一对应关系

对象集合和ListBox行之间的一对一对应关系
EN

Stack Overflow用户
提问于 2013-05-01 08:42:30
回答 2查看 283关注 0票数 0

有没有什么有效的方法可以通过发送ListBox消息来找到WinAPI中排序后的LB_SETITEMDATA所在的行?我有客户端连接到我的服务器,并需要把他们的if在排序的ListBox,以便用户可以点击一行,并与当前客户端交互一方面,如果客户端断开其记录从ListBox删除另一方面。我已经通过LB_SETITEMDATA使用套接字链接了行,用于通过单击选择客户端,但没有通过链接数据(而不是通过字符串)获取行的查找消息。我找到了两个宏,其中一个的名字和我要找的很像,但在里面我没有发现它们之间有任何显著的区别。实验表明,两个宏或其消息中没有一个不起作用(仅按显示的字符串搜索是正确的)。

宏集:

代码语言:javascript
复制
#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。

代码语言:javascript
复制
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发送到每一行,并将结果与当前数据进行比较。它看起来不合理,但它写起来很容易,而且可以工作。

EN

回答 2

Stack Overflow用户

发布于 2013-05-01 09:28:20

看看执行所需操作的ListBox_FindItemData宏。

它使用的LB_FINDSTRING消息表示可以根据“匹配的长值”进行匹配。

LB_FINDSTRING尝试查找具有与lParam参数匹配的长值(作为LB_ADDSTRING或LB_INSERTSTRING消息的lParam参数提供)的项目。

票数 1
EN

Stack Overflow用户

发布于 2013-05-01 10:06:34

我强烈建议您切换到虚拟ListBox或虚拟ListView,根据需要将实际数据存储在您自己的列表/数组/任何需要的地方,以您想要的方式排序。ListBox/ListView只是显示列表中的内容,数据实际上并不存储在ListBox/ListView本身中。这样,当您需要查找某些内容时,您可以查看您自己的存储,而不是UI。这还提供了性能优势,并使您能够更好地控制数据管理、缓存等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16311156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档