Ausgabe von mehreren Strings in eine Edit-Box oder Listenfeld



  • Hallo,

    Ich bin neu in diesem Gebiet und suche deshalb etwas Hilfe. Das Problem sollte für euch nicht allzu schwierig zum lösen sein, habt deshalb bitte etwas nachsicht. Nach zig Stunden Internetrecherhce krieg ich es einfach nicht richtig hin.

    Hier mein Problem: (Visual C++ 6.0)

    Ich sachreibe eine kleine einfache Anwendung in C. Ich möchte dabei in ein Feld mehrere Strings reinschreiben. Bisher hab ich nur folgendes gefunden:

    HWND hTitleMask = GetDlgItem(hwndDlg, IDC_EDIT);
    SetWindowText(hTitleMask, "Ausgabe");

    nun möchte ich aber mehrere Strings rausschreiben können (jeden in einer eigenen Zeile). Außerdem sollte ich ja dafür keine Edit_Box nehmen müssen, sondern irgendein Listenfeld oder ähnliches.
    Hab dann bei meiner Recherche folgendes gefunden:

    HWND hTitleMask = GetDlgItem(hwndDlg, IDC_LIST);
    SendDlgItemMessage(hTitleMask, IDC_LIST,LB_ADDSTRING,0,(LPARAM) (LPSTR) "Erste Zeile");

    Das funktioniert bei mir aber nicht. Ich habe im Listenfeld keine Ausgabe.
    Was mache ich falsch oder wie kann ich genannte Funktion am einfachsten realisieren.

    Ach ja:
    Ich möchte mich natürlich selbst auch besser einarbeiten. Ich hab dann nach Literatur gesucht. Nur möchte ich nicht das erstbeste Buch kaufen. Kann mir jemand irgenwelche Literatur empfehlen?
    z.B. Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API ???

    Danke schon mal!
    Liebe Grüße

    FreedomRunner



  • FreedomRunner schrieb:

    HWND hTitleMask = GetDlgItem(hwndDlg, IDC_EDIT);
    SetWindowText(hTitleMask, "Ausgabe");

    nun möchte ich aber mehrere Strings rausschreiben können (jeden in einer eigenen Zeile). Außerdem sollte ich ja dafür keine Edit_Box nehmen müssen, sondern irgendein Listenfeld oder ähnliches.

    Also eine neue Zeile realisiert man in einem (Multiline(!)-)Edit-Feld mit \r\n , also zum Beispiel so:

    SetWindowText(GetDlgItem(hDlgParent, EBX_DEST), TEXT("Erste Zeile\r\nzweite Zeile"));
    

    Die Einträge in einer Listbox können nur einzeilig sein. Wenn Du Text an ein Edit-Feld *anhängen* willst, guck Dir das mal an: http://winapi.net/index.php?inhalt=s10

    FreedomRunner schrieb:

    HWND hTitleMask = GetDlgItem(hwndDlg, IDC_LIST);
    SendDlgItemMessage(hTitleMask, IDC_LIST,LB_ADDSTRING,0,(LPARAM) (LPSTR) "Erste Zeile");

    Das ist ja auch doppelt gemoppelt: Erst ermittelst Du den Handle der Listbox via GetDlgItem und dann nochmal via SendDlgItemMessage; so reicht das (Das mit dem String ist auch -bezogen auf UNICODE/ANSI (also den Zeichensatz)- etwas unglücklich gelößt, da es immer ein ANSI-String ist, auch wenn Du auf UNICODE kompilierst):

    SendDlgItemMessage(hDlgParent, IDC_LIST, LB_ADDSTRING, 0, (LPARAM)TEXT("Erste Zeile"));
    

    Du musst natürlich sicherstellen, das IDC_LIST auch die ID des Controls repräsentiert 😉 .

    FreedomRunner schrieb:

    Ach ja:
    Ich möchte mich natürlich selbst auch besser einarbeiten. Ich hab dann nach Literatur gesucht. Nur möchte ich nicht das erstbeste Buch kaufen. Kann mir jemand irgenwelche Literatur empfehlen?
    z.B. Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API ???

    Jo, "Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API", 5. Auflage von Charles Petzold 😉 .



  • erst mal vielen Dank für deine Antwort.
    Werde das Buch auch gleich bestellen.

    hab aber noch folgendes Problem:
    folgendes funktioniert (bekomme eine Ausgabe in der Edit-Box):

    HWND hTitleMask = GetDlgItem(hwndDlg, IDC_EDIT);
    SetWindowText(hTitleMask, "Ausgabe");

    aber folgendes funktioniert nicht (keine Ausgabe):

    SendDlgItemMessage(hwndDlg, IDC_EDIT, LB_ADDSTRING, 0, (LPARAM)TEXT("Erste Zeile"));
    muss ich bei zweiter Variante einen anderen handle übergeben?

    liebe Grüße



  • FreedomRunner schrieb:

    aber folgendes funktioniert nicht (keine Ausgabe):

    SendDlgItemMessage(hwndDlg, IDC_EDIT, LB_ADDSTRING, 0, (LPARAM)TEXT("Erste Zeile"));
    muss ich bei zweiter Variante einen anderen handle übergeben?

    Also, das letzteres natürlich nur für Listboxen gilt, ist klar, oder? :p (Nop, der Handle ist der selbe, nämlich der des Parent-Dialogs.)



  • Vielen Dank!

    war mein Fehler!
    hab noch nicht ganz den Überblick - programmiere sonst nur Mikrocontroller.
    Zur Zeit probier ich mal was neues aus - sieht man ja!!!

    Aber nochmals vielen Dank für die hilfreichen Antworten.
    Find ich SUPER!!!!

    liebe Grüße


Anmelden zum Antworten