2016-08-06 11 views
0

このコードは、作成時にitemIDを取得してコードを変更する必要がありますが、コードを変更することはありません(少なくとも私のコードで)。 "LB_ADDSTRING"と "LB_SETITEMDATA"。どうすればこのことができますか?ありがとう!LB_SETITEMDATA ListBoxが動作しませんWin32 Api C++

//listBox Downloads 
     hWndList = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("listbox"), "", LBS_HASSTRINGS | WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_AUTOVSCROLL, 0, ScreenAddaptX(10)+30, ScreenAddaptX(100), ScreenAddaptY(40), hwnd, (HMENU)105, NULL, NULL); 
     SendMessage(hWndList, LB_ADDSTRING, 0, (LPARAM)"Downloading Test at 50%"); 
     int nItem = SendMessage(hWndList, LB_ADDSTRING, 0, (LPARAM)"Downloading Test1 at 70%"); 
     SendMessage(hWndList, LB_SETITEMDATA, (WPARAM)nItem, (LPARAM)"Downloading Test1 at 90%"); 
+1

なぜ関数呼び出しの戻り値をチェックしていませんか? – stark

+0

あなたのコードには 'itemID'はありません。アイテムデータを文字列リテラルに設定するだけです。少なくとも、あなたがしたいことを説明してください。 –

+0

今説明しました@BarmakShemirani – Jose

答えて

1

LB_SETITEMDATAは、指定した項目に関連付けられたユーザー定義値をリストボックスに設定します。 アイテムのテキストの変更には使用されません。

ただし、テキストを変更しようとしているようです。何らかの理由でそのアクションのメッセージがないので、アイテムを削除して、必要なテキストの新しいアイテムを挿入する必要があります。

int nItem = 1; 
SendMessage(list, LB_DELETESTRING, nItem, 0); 
SendMessage(list, LB_INSERTSTRING, nItem, (LPARAM)"Downloading Test1 at 90%"); 
+1

または、リストボックスのオーナーを描画するには、 'LB_SETITEMDATA'を使用して目的のテキストを保存し、描画中に' LB_GETITEMDATA'を使用してテキストを取得します。その後、テキストを変更するためにアイテムを削除して再挿入する必要はありません。 'LB_SETITEMDATA'は新しいテキスト、' InvalidateRect() 'は再描画します。 –

関連する問題