假设我有 20 个不同长度的字符串,每个字符串都应该获得类似于以下内容:
TCHAR *itemText[...];
SendMessage(hwndCombobox, CB_GETLBTEXT, i, (LPARAM)itemText);
由于我有项目的索引,我想在 for 循环中使用上面的代码。但是因为每个项目都有不同的长度,我不能使用类似的东西:
int itemLength = SendMessage(hwndCombobox, CB_GETLBTEXTLEN, i, 0);
TCHAR *itemText[itemLength];
由于使用消息CB_GETLBTEXTLEN
首先需要长度,因此需要获取长度。我知道我可以使用,例如,TCHAR *itemText[1024];
但我个人不喜欢这种方式。
我也尝试使用new
and delete
,而其他人建议我使用vector
with std::string
,就像在这篇文章中一样delete pointers created by new in CallBack Function,但这会导致另一个问题,即CB_GETLBTEXT
requires所需的 LPARAM 参数A pointer to the buffer that receives the string.
,所以下面的代码不起作用,因为最后一个参数是std::string
,而不是接收字符串的指针:
int i;
Vec<std::string> itemText;
for (i = 0; i < itemCount; i++) {
......... // Don't know how to initialize a string with a specified length.
SendMessage(win->hwndFindBox, CB_GETLBTEXT, i, (LPARAM)itemText.At(i));
}
我也不知道如何std::string str
用指定的长度初始化 a 。
实际上,我想将组合框控件的编辑控件中键入的字符串与此组合框上的项目进行比较。你有什么建议来解决这个问题或做我想做的事吗?