gpt4 book ai didi

c++ - 具有固定字符串列表和自定义数据的 WinAPI ComboBox

转载 作者:行者123 更新时间:2023-11-28 06:11:54 24 4
gpt4 key购买 nike

有一个问题让我困惑了好几次,我总是不得不求助于所有者绘制的解决方案 - 然而,这是我这次不想参与的问题。我的问题正如标题所说,这是代码中的模型情况:

HWND hComboBox=::CreateWindow(WC_COMBOBOX,NULL,WS_VISIBLE | WS_CHILD | CBS_HASSTRINGS | CBS_DROPDOWN,10,10,100,100,hWnd,0,hInstance,NULL);
ComboBox_SetItemData( hComboBox,
ComboBox_AddString(hComboBox,"My item 1"),
1234
);
ComboBox_SetItemData( hComboBox,
ComboBox_AddString(hComboBox,"My item 2"),
5678
);
int i=ComboBox_FindString(hComboBox,0,1234); // <-- crash
ComboBox_SetCurSel(hComboBox, i );

显然,我想通过关联的自定义数据(在本例中为 1234 和 5678)来识别每个项目。我知道我能够在 Delphi 中做到这一点,但还没有说服纯 WinAPI 来做同样的事情(显而易见的问题是 Delphi 开箱即用的功能背后隐藏着什么)。

感谢回复。

最佳答案

CBS_HASSTRINGS 在非所有者绘制组合框中毫无意义。在非所有者绘制组合框中,每个项目都有一个字符串和一个可选的数据项,ComboBox_FindString 总是使用字符串查找项目。当然,1234 不是有效的字符串指针。你基本上是在给控件一个无效的指针,它崩溃也就不足为奇了:)

没有内置消息可以让您在非所有者抽奖组合中按项目数据搜索,因此您需要自己编写,例如:

int iCount = ComboBox_GetCount(hComboBox), iFound = -1;
for (int i = 0; i < iCount; i++)
{
if (ComboBox_GetItemData(hComboBox, i) == 1234)
{
iFound = i;
break;
}
}

关于c++ - 具有固定字符串列表和自定义数据的 WinAPI ComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31098429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com