2009-04-10 15 views
3

私にはおそらく簡単な問題がありますが、まだそれほど問題はありません。私はWin32/C++でリストボックスを使用しています。リストボックスから選択したテキストを取得するときに返される文字列はちょうどゴミです。構造体などのハンドルですか?Win32 LB_GETTEXTはガベージを返します

以下はコードと私が得るものの例です。

std::string Listbox::GetSelected() { 
int index = -1; 
int count = 0; 

count = SendMessage(control, LB_GETSELCOUNT, 0, 0); 

if(count > 0) { 
    index = SendMessage(control, LB_GETSEL, 0, 0); 
} 

return GetString(index); 
} 


std::string Listbox::GetString(int index) { 
int count = 0; 
int length = 0; 
char * text; 

if(index >= 0) { 
    count = GetItemCount(); 

    if(index < count) { 
     length = SendMessage(control, LB_GETTEXTLEN, (WPARAM)index, 0); 
     text = new char[length + 1]; 

     SendMessage(control, LB_GETTEXT, (WPARAM)index, (LPARAM)text); 
    } 
} 
std::string s(text); 
delete[] text; 

return s; 
} 

GetItemCountだけです。リストボックスに現在あるアイテムの数だけを取得します。

私はリストボックスから奪った文字列は、「テスト文字列」であり、それはすべてのヘルプがappericatedされる¨±é»TZA

を返され、感謝。

私はGetStringが正しい文字列を返すように、GetSelected関数に絞り込みました。

+0

ANSIまたはUNICODE用にコンパイルしていますか? –

+0

また、SendMessageの返品は何ですか?また、期待されるLBメッセージとはどのように比較されますか? –

+0

GetSelectedは何を返しますか?どのように絞り込んだのですか? –

答えて

8

LB_GETSELメッセージは、選択したアイテムのインデックスを返しません。これは、WPARAMで渡すITEMの選択したSTATEを返します。

また、項目が選択されていない場合は、明らかに間違っている項目-1の項目の文字列を取得しようとする深刻なバグがあります。これらのSendMessage呼び出しの戻り値を確認することは、問題の診断に役立ちました。

最初に選択したアイテムのテキストを取得する方法の例を示します。

// get the number of items in the box. 
count = SendMessage(control, LB_GETCOUNT, 0, 0); 

int iSelected = -1; 

// go through the items and find the first selected one 
for (int i = 0; i < count; i++) 
{ 
    // check if this item is selected or not.. 
    if (SendMessage(control, LB_GETSEL, i, 0) > 0) 
    { 
    // yes, we only want the first selected so break. 
    iSelected = i; 
    break; 
    } 
} 

// get the text of the selected item 
if (iSelected != -1) 
    SendMessage(control, LB_GETTEXT, (WPARAM)iSelected , (LPARAM)text); 

また、LB_GETSELITEMSを使用して、選択されている項目のリストを取得することもできます。

+0

これをクリアしていただきありがとうございます。変更はうまくいくようです。現在、リストボックスから文字列を選択する前に、インデックス> = 0であることを確認します。 – Cory

関連する問題