2016-08-06 64 views
0

Ich habe diesen Code, der die itemID beim Erstellen erhalten und den Code ändern sollte, aber es ändert es nie (zumindest mit meinem Code) und ich möchte das Element, das ich auswählen mit ändern "LB_ADDSTRING" mit "LB_SETITEMDATA". Wie könnte ich das tun? Vielen Dank!LB_SETITEMDATA ListBox funktioniert nicht 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

Warum überprüfen Sie nicht die Rückgabewerte von Funktionsaufrufen? – stark

+0

Es gibt keine 'itemID' in Ihrem Code. Sie legen Elementdaten nur auf ein Zeichenfolgenliteral fest. Erklären Sie zumindest, was Sie tun möchten. –

+0

Jetzt erklärt @BarmakShiemrani – Jose

Antwort

1

LB_SETITEMDATA setzt einen benutzerdefinierten Wert mit dem in einem Listenfeld angegebene Element zugeordnet ist. Es wird nicht verwendet, um den Text des Artikels zu ändern.

Es scheint jedoch, Sie versuchen, den Text zu ändern. Aus irgendeinem Grund gibt es keine Nachricht für diese Aktion, daher müssen Sie das Element löschen und ein neues Element mit dem gewünschten Text einfügen.

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

Oder Sie können die ListBox mit "LB_SETITEMDATA" zum Speichern des gewünschten Texts und "LB_GETITEMDATA" während des Zeichnens mit dem Eigentümer zeichnen, um den Text abzurufen. Dann müssen Sie keine Elemente löschen und neu einfügen, um ihren Text zu ändern. Einfach 'LB_SETITEMDATA' der neue Text und' InvalidateRect() 'um neu zu zeichnen. –