integer ausgeben



  • Hallo zusammen,

    ich möchte einen integerwert in einer for-Schleife auf dem Bildschirm ausgeben. Die Ausgabe soll an einer bestimmten Position auf einem Fenster erfolgen. Das Fenster habe ich mit CreateWindowEx erstellt.

    Hat jemand eine Idee wie ich diesen Wert ausgeben kann. Textout kann keine Integer ausgeben und ich weis leider nicht, wie man konvertiert. 😞

    Vielen Dank.



  • Es ist zwar offensichtlich keine Frage zu Standard C++, aber da würde man das so machen

    #include <string>
    #include <sstream>
    
    int i;
    std::stringstream Str;
    Str << i;
    
    std::string als_string = Str.str();
    const char* als_pchar = als_string.c_str();
    


  • Die Konvertierung klappt. Ich habe in dem Feld als_pchar den gleichen Wert wie in dem Feld i. Allerdings erhalte ich dann bei der Ausgabe in TextOut folgenden Fehler:

    Fehler 11 error C2664: 'wcslen': Konvertierung des Parameters 1 von 'const char *' in 'const wchar_t *' nicht möglich



  • Mit wcstombs() oder hierschauen.
    Nimm's mir nicht übel, aber du solltest zuerst mit den Grundlagen der Programmiersprache (untertrieben gesagt) vertraut machen, bevor du mit der graphischen Oberfläche anfängst. Wenn du richtig programmieren lernen willst, aber verkehrt rum anfängst, wirst du's später bereuen.



  • Ev. ist es besser gleich die std::wstring / std::wstringstream zu verwenden.
    Dann entfällt das Konvertieren in ein Wide-String.



  • Ich bin Programmierer! Ich kann aber kein C++. Ich muss auch nur wissen wie man einen integer mit TextOut in einem Fenster ausgibt. Mehr will ich ja gar nicht wissen. 😉

    Hat jemand eine Idee?



  • datatom schrieb:

    mit TextOut in einem Fenster ausgibt

    Aha. Framework?



  • Ich möchte das SDK Beispiel AmCap anpassen. Dazu verwende ich Visual C++ 2010 Express. Da ich keine Ahnung habe von dem ganzen Windows-Kram, weiß ich auch nicht, ob es zum Framework zählt 😉

    Das Fenster wird auf jeden Fall mit CreateWindowEx angelegt.



  • TextOut aus dem WinAPI erwartet einen LPCTSTR, d.h. TCHAR const *. TCHAR ist abhängig von den Präprozessordefinitionen, die dein Projekt dem Compiler mitgibt, entweder char oder wchar_t (siehe dazu http://msdn.microsoft.com/de-de/library/c426s321(v=vs.80).aspx ).

    Wenn du dich auf eine Variante des WinAPI festlegen kannst: Ist TCHAR char, kannst du std::string und std::stringstream benutzen; ist TCHAR wchar_t entsprechend std::wstring und std::wstringstream. Musst du beides unterstützen, dann empfiehlt sich etwas wie

    typedef std::basic_string      <TCHAR> tstring;
    typedef std::basic_stringstream<TCHAR> tstringstream;
    

    Benutzung wie gehabt.

    Ansonsten: Wenn du mit dem WinAPI programmieren willst, ist es kein haltbarer Zustand, von diesem ganzen Windows-Kram keine Ahnung zu haben. Ich rate dir dringendst, dich mit seinen Konzepten genauer zu befassen. Wichtig auch: Nackte C-APIs sind ein Albtraum in Bezug auf Exceptionsicherheit. Ziehe in Erwägung, Handles in RAII-Containern (beispielsweise shared_ptr mit geeignetem Deleter) zu verstauen.



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • @seldon: er wollte ja kein C++.
    Kannst dann itoa() oder sprintf() nehmen. Dazu gibt's reichlich Beispiele im Internet.



  • datatom schrieb:

    Ich bin Programmierer!

    Ah und was programmierst du denn, deinen Videorekorder?



  • Bitte keine dummen Beiträge ⚠



  • [Rewind] schrieb:

    @seldon: er wollte ja kein C++.

    Wann hat er Dir das denn verraten?



  • Ich habe jetzt eine Lösung gefunden 😃 😃 😃 , wie ich einen Integerwert ( ⚠ unicode ⚠ ) mit TextOut ausgeben kann:

    int r = 350;
    wchar_t buffer[65];
    
    _itow( r, button, 10);
    TextOut(hdc, 100, 100, (LPCWSTR)buffer, sizeof(buffer));
    

    Quelle: http://msdn.microsoft.com/de-de/library/yakksftt.aspx

    Vermutung:
    Die 10 am Ende von _itow bedeutet wohl, dass r in dem String als dezimale "Zahl" dargestellt wird.

    Hat jemand noch eine Ergänzung bzw. Korrektur?



  • Ja: verwende die sichere Version dieser Funktion: _itow_s() Damit wird überprüft, ob der Buffer groß genug ist, um gefährliche Pufferüberläufe zu vermeiden.

    Belli schrieb:

    [Rewind] schrieb:

    @seldon: er wollte ja kein C++.

    Wann hat er Dir das denn verraten?

    Die Frage ist nicht wann sondern wie. Indem er die ersten Vorschläge zu Standard C++ (Strings und Stringstreams) freundlich abgelehnt hat.


Log in to reply