Ausgabe im aktiven Fenster



  • Hallo alle zusammen,

    da ich erst vor kurzem angefangen habe mit Visual C++ zu arbeiten, bitte ich meine dumme Frage zu entschuldigen.

    Ich versuche eine C++ Programm zu erstellen, in dem die folgende Funktion aufgerufen wird:

    void Wurzel (void)
    {
    if (i < 50000)
    {
    zahl=sqrt(i);
    i++;
    }
    }

    Einen Funktionsprototyp habe ich erstellt.
    Nun soll das Ergebnis zahl in einem Win32-Projekt in einem Fenster ausgegeben werden. Das Fenster geht auch. Nur habe ich keine Ausgabe. Wie kann ich sowohl Variable i als auch Variable zahl (beide long integer, math.h ist eingefügt) im fenster ausgeben. Die Zahl i soll hochgezählt werden, wie auch zahl.

    Ich denke mir ich kann das in die case Paint packen, oder?

    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    // Hier ausgabe zahl und i;
    TextOut (hdc, 5, 110,"Berechnungsergebnis:",20);
    EndPaint(hWnd, &ps);
    break;

    Nur wie lautet der Befehl? i soll etwa bei 25, 110 anfangen und zahl bei 45, 110.

    Ich wäre euch sehr verbunden wenn ihr mir helfen könnt.

    Vielen Dank im Voraus



  • Welcher befehl? sprintf? oder was genau suchst du? (TextOut hast du ja schon)



  • mein Problem ist, wenn ich die Variable ausgeben will, bekomme ich eine Fehlermeldung, nun ist meine Frage, wie der TextOut-Anweisung aussehen muss um die Variable ausgeben zu können.



  • Also, mit sprintf kann ichs nicht, aber so:

    Statt:

    // Hier ausgabe zahl und i;
    TextOut (hdc, 5, 110,"Berechnungsergebnis:",20);
    

    Mach mal:

    CString strAusgabe;
    strAusgabe.Format("Berechnungsergebnis: %d %d", zahl, i);
    TextOut (hdc, 5, 110,strAusgabe,20);
    

    Das Format funktioniert wie bei printf, falls das also nicht ganz klappt, weißt du ja, wo du gucken musst. 🙂



  • Vielen Dank, die Ausgabe klappt jetzt, bzw. ich sehe was im Fenster, aber ich habe das Problem, das ich nur Steuerzeichen auf dem Bildschirm sehe, ich denke das da noch ein Problem mit der Konvertierung besteht.

    Quelltext:

    Funktionwurzel:
    void Wurzel ()
    {
    i=1.0;
    do
    {
    zahlausgabe.Format(" %ld", i);
    // strAusgabe.Format(" %ld %ld", i, zahl);
    zahl = sqrt (i);
    i++;
    }
    while (i < 50000);

    }

    WM_PAINT:
    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);

    TextOut (hdc, 40, 270,zahlausgabe,10);

    EndPaint(hWnd, &ps);
    break;

    Variablen:
    long double zahl;
    long double i;
    int a;
    CString strAusgabe;
    CString zahlausgabe;

    void Wurzel (void) ;

    Aufruf der Funktion Wurzel() in WinMain() direkt am anfang.

    Es wäre schön wenn ich auf dem Bildschirm z.B. die Zahl i die ja von 1 bis 49999 geht hochgezählt wird. Habe mal was von GetDC() & ReleaseDc() gehört.
    Kann man das hier vielleicht realisieren.

    Habe mir schon überlegt, das ich vielleicht die Berechnung in zwei Threads aufbaue und die mal mit einer unterschiedlichen Priorität aufzurufen und dann die Zeit zu stoppen und auszugeben, wenn jemand hier eine Möglichkeit hat, wäre ich sehr verbunden.



  • Hast du dir mal die Formatbezeichner angeschaut?

    Da du die Variablentypen nicht geschrieben hattest, hab ich erstmal d genommen.
    Du musst aber f nehmen.
    zahlausgabe.Format(" %5f", i);
    Bei Kommazahlen musst du entsprechend anpassen.

    Printf kennst du doch, oder? 😕



  • Sorry, habe ich ganz übersehen. Ich habe wieder viel zu komplex gedacht und die kleinen Fehler übersehen.

    Habe es gerade geändert und die Ausgabe klappt. Nun habe ich aber mal wieder eine Frage, wenn ich die Zahlenausgabe im case WM_Paint: eintrage wird erst die Berechnung ausgeführt und dann erst das Ergebnis ausgegeben. Nun habe ich mir überlegt ich baue das in eine Doppelklick-Funktion ein und dann das Ergebnis hochzählen lassen.

    Habe mir folgendes gedacht:

    case WM_LBUTTONDBLCLK:
    MessageBox (hWnd, "Doppelklick der linken Maustaste erkannt", "Meldung",MB_ICONWARNING);
    hdc = BeginPaint(hWnd, &ps);
    TextOut (hdc, 160, 110,zahlausgabe,10);
    EndPaint(hWnd, &ps);
    return 0;

    Wenn ich das so mache klappt das aber leider nicht. Ich denke mal ich habe da wieder einen blöden Fehler, aber ich hoffe das jemand da einen Rat hat. Die Ausgabe soll hier also einfach die Variable Zahl aus dem obrigen Quelltext ausgeben. Es soll von 1 bis 49999 hochzählen und gleichzeitig im Fenster anzeigen und nicht erst die Berechnung ausführen und dann das Endergebnis hinschreiben.

    Danke im Voraus.



  • Ich habe es auch mal so probiert,

    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);

    //TextOut (hdc, 160, 110,zahlausgabe,10);

    EndPaint(hWnd, &ps);
    break;
    hier ist auch eine Ausgabe im Fenster vorhanden, nur rechnet er erst die Wurzelwerte aus, und gibt mir dann nur das letzte Ergebnis aus. Kann ich das irgendwie hinbekommen, das er mir die Zahl hochzählt?


Anmelden zum Antworten