異なる長さのストリングが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を使用しようとしましたが、この投稿のように、CallBack Functionでnewによって作成されたポインタを削除するdelete
ように、他の人が代わりにvector
一緒に使用することを提案していますが、必要なLPARAMパラメータがrequiresであるという別の問題が発生するため、次のコード文字列を受け取るポインタではなく、最後のパラメータがであるため、機能しません。std::string
CB_GETLBTEXT
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
指定した長さでを初期化する方法もわかりません。
実際、コンボボックスコントロールのエディットコントロールに入力された文字列を、このコンボボックスのアイテムと比較したいと思います。この問題を解決したり、私がやりたいことをしたりするための提案はありますか?