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


Anmelden zum Antworten