Anfänger: ComboBox, CB_ADDSTRING, bekomme CB_ERR zurück
-
Hi,
ich möchte Einträge zu einer ComboBox hinzufügen.Habe schon diverse Sachen ausprobiert:
char* cAddStr1 = "Hello"; SendMessage(hComboBox, CB_ADDSTRING, 0, (DWORD)cAddStr1 ); SendMessage(hComboBox, CB_ADDSTRING, 0, (DWORD)&cAddStr1 ); char acAddStr2[] = "Hello"; SendMessage(hComboBox, CB_ADDSTRING, 0, (DWORD)acAddStr2 ); SendMessage(hComboBox, CB_ADDSTRING, 0, (DWORD)&acAddStr2 ); std::string sAddStr3 = "Hello"; SendMessage(hComboBox, CB_ADDSTRING, 0, (DWORD)sAddStr3.c_str() ); SendMessage(hComboBox, CB_ADDSTRING, 0, (DWORD)"Hello" );SendMessage gibt mir bei jedem der obrigen Aufrufe CB_ERR zurück.
Was mach ich falsch?Die Forumsuche hat auch nichts gebracht. Bei den meisten war die ComboBox zu klein bzw. es wurde nur ein einziger Eintrag angezeigt. Bei mir wird jedoch ein Fehler zurückgegeben.
TIA,
Coolcat
-
Bist du dir sicher, dass dein Handle korrekt ist?!
-
ja, zumindest sehe ich die leere ComboBox im Fenster
außerdem würde sich die Anwendung bei:
if (!hComboBox) { /* */ }beenden.
Coolcat
-
Hast du das um den SendMessage-Block geschrieben? Ist hComboBox static bzw. global (konkret: bei SendMessage noch gültig)?
-
Coolcat schrieb:
ja, zumindest sehe ich die leere ComboBox im Fenster
außerdem würde sich die Anwendung bei:
if (!hComboBox) { /* */ }beenden.
Wieso? Vielleicht solltest du erstmal IsWindow aufrufen, um zu sehen ob dein Handle gültig ist.
-
Fehler gefunden

Man sollte nicht so auf Fehler prüfen:
LRESULT res = SendMessage(hComboBox, CB_ADDSTRING, 0, (DWORD)"Hello" ); if (res = CB_ERR) { }(res = CB_ERR) entspricht in der IF-Anweisung CB_ERR, was größer 0 und deshalb true.....bin eben Delphiumsteiger....
Der Grund warum der Eintrag nicht angezeigt wurde war, das ich die ComboBox mit einer Höhe von 22 bei CreateWindowEx erzeugt hatte....
Jetzt funzt alles wunderbar!
THX@All ! 
@Shlo:
MSDN, CreateWindowEx:Return Value
If the function succeeds, the return value is a handle to the new window.
If the function fails, the return value is NULL.
Ich habe das Ding ja direkt davor erzeugt, also sollte ein Test auf (!hComboBox) reichen, oder?
Coolcat
-
Tipp: nimm
if (CB_ERR == res) ...- da meckert der Compiler
Tipp2: ::IsWindow(hComboBox) check nicht nur, ob das Handle nicht NULL ist, sondern auch ob es ein gültiges HWND ist.
-
@Tip1: Gute Idee! THX
@Tip2: Muss ich mir wohl auch angewöhnen...
THX,
Coolcat