GetWindowText funktioniert nicht! Was mache ich falsch?



  • Hi!

    Folgender Code:

    LPTSTR Text="";
    HWND hSum;
    hSum= GetDlgItem(hWnd, IDC_SUM); //Funktioniert einwandfrei!
    SetWindowText(hSum,"Test"); // Funktioniert ebenfalls -> Handle ist also korrekt.
    GetWindowText(hSum,Text,4); // Schreibt nichts in den LPTSTR und gibt als Anzahl der ausgelesenen Zeichen NULL zurück!
    

    Ich möchte den Inhalt eines Textfeldes "IDC_SUM" auslesen und in den LPTSTR "Text" schreiben. Dazu rufe ich GetWindowText(hSum,Text,4); auf. *Die Textbox enthält WENIGER als die angegebenen 4 Zeichen!*. Obwohl eigentlich alles passen müsste, gibt die Funktion NULL zurück, was der Anzahl der ausgelesenen Zeichen entspricht.

    Erkennt jemand den Fehler?

    Gruß, veryxRV

    PS: Hoffe es war diesmal ausführlich genug erklärt, was ich meine 😉



  • hol dir erstmal ein bisschen speicher



  • Dein Zeiger zeigt auf das Stringliteral "", auf das du nicht schreibend zugreifen darfst, und das - selbst wenn du es dürftest - zu klein für 4 Zeichen ist.

    Du musst den Zeiger schon auf einen hinreichend großen und beschreibbaren Puffer verweisen lassen.



  • Habe ich auch schon probiert, kommt aufs gleiche raus...m 😞

    EDIT: -> Also das mit mehreren Zeichen. Wie mache ich es denn beschreibbar?



  • hast du etwa sofort mit winapi angefangen? 😃 looooool

    du brauchst GetWindowTextLength und malloc/new



  • TCHAR text[100];
    GetWindowText(hSum, text, 100);
    


  • Naja besser so:

    UINT uiStrLen = SendMessage(hWhd, WM_GETTEXTLENGTH, 0, 0L) + 1;
    PTCHAR pszBuffer = new TCHAR[uiStrLen];
    SendMessage(hWnd, WM_GETTEXT, uiStrLen, reinterpret_cast<LPARAM>(pszBuffer));
    MessageBox(NULL, pszBuffer, NULL, 0);
    // ...
    delete [] pszBuffer;
    


  • wejoi schrieb:

    hast du etwa sofort mit winapi angefangen? 😃 looooool

    du brauchst GetWindowTextLength und malloc/new

    Mit der Frage währe ich vorsichtig. Ich kann nebenbei noch C#, C, Pascal, Basic, JavaScr, und nen bissl PHP.. Kann sein, dass ich noch was vergessen hab ^^. Beantwortet das deine Frage? :p

    Ich habe einfach nur Probleme mit dem leicht abgeänderten Prinzip in C++! Hab die Logik da teilweise noch nicht drauf..

    Danke jedenfalls 🙂

    @Die anderen^^: Danke, ich probiers mal!



  • veryxRV schrieb:

    Ich kann nebenbei noch C#, C, Pascal, Basic, JavaScr, und nen bissl PHP..

    Ich habe einfach nur Probleme mit dem leicht abgeänderten Prinzip in C++! Hab die Logik da teilweise noch nicht drauf..

    Ist dir klar, dass dein Code C ist (was du ja nebenbei angeblich "kannst")?



  • Ja das ist mir klar, ich weiß auch nicht mehr genau wie die Sprache hieß. Aber ich mein es war etwas mit C. C# ist schließlich auch nicht *unbedingt* das gleiche wie C oder eben C++. Vielleicht C-Script? Ich weiß es nich. Klingt komisch - is aber so! 😉 Es war ein spezieller Compiler und es gab auch eine Anleitung dazu, aber ich habe nie wirklich gelesen, was ich da wirklich für ne Sprache gelernt hab ^^ Jedenfalls konnte/kann ich damit umgehen.



  • veryxRV schrieb:

    Ich habe einfach nur Probleme mit dem leicht abgeänderten Prinzip in C++! Hab die Logik da teilweise noch nicht drauf..

    Warum? Alles, was C kann, kann C++ auch. Da ist das Prinzip das Gleiche. Dir stehen sämtliche C-Befehle zur Verfügung. Bei C++ kommt nur die OOP-Kapselung dazu (und ein paar neue Befehle), aber Du kannst auch mit einem C++-Compiler reine C-Programme schreiben (nur bei Befehlen Casts muß man das richtige Casting beachten, z. B. bei malloc).



  • Ja!!! Hab doch schon gesagt, dass ich mich in der Sprache vertan habe! S.h. letzten Post!


Anmelden zum Antworten