LPWSTR in float umwandeln



  • GetDlgItemInt liefert dir halt ein int, wie der Name schon vermuten lässt. Da ist nix mit Nachkommastellen. Du musst also eher GetDlgItemText benutzen und den String dann umwandeln. C++-Möglichkeiten wurden genannt, in C könnte man z.B. sscanf, atof/atodbl oder strtod benutzen.



  • Ja C++ stimmt schon 🙂

    wie funktioniert das mit wstringstream??
    Habe sstream schon included, zumindest meint MSDN dass ich das braucht, aber wie wende ich das an? Oo

    Danke 🙂



  • _wscanf!?



  • Jochen Kalmbach schrieb:

    _wscanf!?

    Das wäre natürlich ein guter und bequemer Weg (wobei du eher swscanf meinst, oder?), aber dann wird man direkt wieder angepöbelt, warum man denn nicht den einzig wahren C++-Puristen-Weg geht und über mehrere Zeilen was in einen Stream rein- und wieder rausschiebt... 😃

    @C0dR: Probier mal in etwa so (ungetestet):

    TCHAR buffer[256];
    GetDlgItemText(hDlg,IDC_LO,buffer,256);
    float f=0.f;
    swscanf(buffer,_T("%f"),&f);
    

    Die Rückgabe von swscanf solltest du vielleicht noch prüfen...



  • Funktioniert 🙂
    Ihr seid klasse 😃

    Allerdings habe ich gemerkt dass ich das beim Einlesen in die Felder auch falsch gemacht habe (also aus den selben variablen soll auch eingelesen werden,beim aufrufen des dialogs).

    Und da habe ich jetz wieder das problem mit den Datentypen. Im moment habe ich das so gelöst:

    std::stringstream sstr;
    LPCWSTR ptr1;
    
    sstr << Minx;		 
    str1 = (wchar_t*)(sstr.str().c_str());
    
    SetDlgItemText ( hDlg, IDC_LO, ptr1);
    

    Allerdings tauchen dann nur Asiatische und sonstige Zeichen auf 😕
    Ich nehme an falscher Zeichensatz?



  • Du kannst nicht einfach von char* nach wchar_t* casten und dann erwarten, dass du noch was vernünftiges rausbekommst. Sowas müsstest du per Funktion richtig umwandeln. Aber warum nimmst du denn std::stringstream und nicht std::wstringstream, wo du doch offensichtlich ein Unicode-Projekt hast? Probier es mit std::wstringstream und lass den Zwischenschritt über ptr1 weg (also übergib direkt die Rückgabe von c_str() an SetDlgItemText). Das klappt wahrscheinlich besser.



  • hm..ok.
    Es sind keine Asiatischen zeichen mehr da, aber die Ergebnisse sind falsch 😞 der macht aus -2 eine 1 und aus 1.5 auch eine 1.



  • C0dR schrieb:

    hm..ok.
    Es sind keine Asiatischen zeichen mehr da, aber die Ergebnisse sind falsch 😞 der macht aus -2 eine 1 und aus 1.5 auch eine 1.

    Zeig mal den aktuellen Code.



  • wow das ging ja schnell 😃

    std::wstringstream sstr;
    sstr << Minx;
    
    SetDlgItemText ( hDlg, IDC_LO, sstr.str().c_str());
    

    und bei der Abfrage:

    TCHAR buffer[256];
    GetDlgItemText(hDlg,IDC_LO,buffer,256); 
    
    float f=0.f; 
    swscanf(buffer,_T("%f"),&f);
    Minx = f;
    

    //EDIT: AHH Mein Fehler! Hatte mich mit den Variablen vertan! Funktioniert alles prima 🙂
    Ihr seid die besten, vielen Dank 🙂

    Jetz noch eine Frage, sofern ihr noch lust habt mir zu helfen 😃

    Gibt es eine möglichkeit den Inhalt des Fensters als BMP / Jpeg / sonstiges auszugeben? Habe gegoogelt aber die möglichkeiten die ich gefunden habe haben mir nur eine schwarze Ausgabe direkt auf den Bildbuffer gegeben oO



  • C0dR schrieb:

    Gibt es eine möglichkeit den Inhalt des Fensters als BMP / Jpeg / sonstiges auszugeben? Habe gegoogelt aber die möglichkeiten die ich gefunden habe haben mir nur eine schwarze Ausgabe direkt auf den Bildbuffer gegeben oO

    Dazu musst du einen Screenshot vom Fenster machen. Dazu gibt es hier einige Threads (z.B. http://www.c-plusplus.net/forum/viewtopic-var-p-is-950658.html).

    EDIT: Oder schau mal besser hier nach, der will dasselbe wie du: http://www.c-plusplus.net/forum/viewtopic-var-t-is-64339-and-start-is-20-and-postdays-is-0-and-postorder-is-asc-and-highlight-is--and-printview-is-1-and-start-is-0.html


Anmelden zum Antworten