float wert als eingabe in editfeld speichern



  • Hallo,
    ich hab ein Editfeld das einzig zur aufnahme von Spannungswerten dient.
    z.b. 5 o. 3.6 oder so.

    hEditU = CreateWindowEx(WS_EX_CLIENTEDGE,
                                       "edit",
                                       ...?,    // <- das ist der Inhalt der Editfelds
                                       WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE |
                                                  ES_AUTOVSCROLL,
                                       620, 50, 100, 20,
                                       hwnd,
                                       NULL,
                                       ((LPCREATESTRUCT) lParam) -> hInstance,
                                       NULL);
    

    Mein Createcode,
    wie kann ich den nun diesen Wert speichern um ihn anschliessend weiter zu verarbeiten??
    Wie gesagt, reine komma werte und kein Text.
    Ich hänge voll 😕
    besten dank schonmal



  • Willst du den Text auslesen und in einen float-Wert umwandeln, oder willst du, dass nur Zahlen und Komma eingegeben werden können (dafür müsstest du das edit subclassen)



  • Nur das Feld auslesen und dann halt nen float wert erhalten.





  • danke für die Antwort,
    doch leider bin ich scheinbar nicht im stande dies korrekt umzusetzen.

    ich erstelle in char als buffer des editfeldes, oder?

    Mit int GetWindowText(
    HWND hWnd, // ist klar
    LPTSTR lpString, // mein buffer char??
    int nMaxCount // auch klar, galube ich
    );

    doch wie übergebe ich das char an die CreateWindow funktion??
    irgend ein Pointer??

    könntest du mir vieleicht etwas Beispiel code basteln?



  • So irgendwie hatte ich das gedacht (ungetestet):

    char buffer[20];
    GetWindowText(hEditU,buffer,20);
    double value = atof(buffer);
    


  • hm,
    könnt ich den nicht einfach den Buffer in der CreateWindowEx einsetzten (als Globale Variable)??

    hEditU = CreateWindowEx(WS_EX_CLIENTEDGE,
                                       "edit",
                                       buffer[4],    // <- das ist der Inhalt der Editfelds
                                       WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE |
                                                  ES_AUTOVSCROLL,
                                       590, 50, 100, 20,
                                       hwnd,
                                       NULL,
                                       ((LPCREATESTRUCT) lParam) -> hInstance,
                                       NULL);
    

    Und dann diesen verwenden??
    oder geht das gar nicht?



  • Willst du das Edit vorbelegen, oder den Inhalt auslesen - falls letzteres reicht es nicht, einfach bei CreateWindow den Buffer anzugeben.



  • beiderlei,
    den Inhalt hab ich mit "0" vorgegeben.
    Nun ist ja die idee das der Benutzer eingibt...
    z.B. 5 und dann wird diese Wert übernommen. Und im Eingabefeld stehen gelassen.
    Dann bräuchte ich diesen Wert um Eine Sinuskurve dammit zu berechnen.

    So schauts mal aus
    www.8ung.at/hosti/Graphrein.jpg



  • Du musst explizit jedesmal nach der Änderung (also entweder EN_UPDATE oder EN_CHANGE abfangen) den Wert auslesen.



  • Das Editfeld wird ja in der WM_CREATE erstellt.
    damit der neue Wert übernommen wird(also dargestellt) müsste ich das Feld im WM_PAINT erstellen?



  • hosti schrieb:

    damit der neue Wert übernommen wird(also dargestellt) müsste ich das Feld im WM_PAINT erstellen?

    Obwohl ich nicht ganz verstehe, wo dein Problem liegt - in WM_PAINT brauchst udn solltest du keine Controls erstellen. Den Wert kannst du mit SetWindowText setzen und mit GetWindowText auslesen (bzw. SetDlgItemText / GetDlgItemText wenn du dem Edit eine ID gibst - hMenu), falls das dein Problem ist.



  • Achso, ja klar.
    dankeschön, ich probiers mal... werd mich aber glaub nochmals melden
    Meine Gedankengänge sind manchmal unerklärlich 😕


Anmelden zum Antworten