Problem mit der Nachrichtenschleife?



  • Also hab es jetzt auch nochmal mit case WM_COMMAND: ausprobiert aber funktioniert trotzdem nicht.

    Weiss echt nicht wo der fehler sein könnte... Hab irgendwie das Gefühl das er die ersten if abfragen für Höher bzw. Tiefer garnicht an nimmt und nur die If-Abfrage für Richtig durchläuft.. 😕



  • weißt du der Variable Zufallszahl eig irgendwo einen wert zu?



  • Matyr schrieb:

    weißt du der Variable Zufallszahl eig irgendwo einen wert zu?

    Ja direkt am Anfang von WinMain.

    Zufallszahl = 6;

    Habs erstmal auf 6 gemacht damit ich das Programm, nach dem Kompilieren, schneller Testen kann.

    int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst,
                        LPSTR lpcdline, int ncmdshow)
    {
       WNDCLASSEX windowclass; // Struktur Fenstereigenschaften
       HWND       hWnd;        // Handle auf Fenster
       MSG        message;     // Nachricht
    
       // Variablen für Spiel
    
       int GerateneZahl = 0;   // Zahl, die spieler eingibt
       int Versuche = 0;       // Anzahl der Versuche 
       int Punkte;             // Punktzahl
    
       // Zufallszahl ermitteln und speichern
       Zufallszahl = 6;
    


  • Wenn die Zufalszahl = 6 ist, dann ist sie dementsprechend nicht größer als 6 und auch nicht kleiner als 6, somit werden diese beiden if Anweisungen nicht ausgeführt und er springt direkt zu Richtig.

    Mfg. Matyr



  • aso...Oh bemerk grad auch den Fehler...^^

    Ich vergleich die zufallszahl garnicht mit der eingegebenen Zahl des Spielers... Mh.. Ja okay werd mich mal drann setzen uind das korrigieren^^

    Dann muss ich also nicht Zufallszahl > 6 etc , sondern den Inhalt von hBox2 Prüfen... aber geht das so einfach ich zB

    if
    {
    hBox2 > Zufallszahl ...
    etc.

    schreibe?

    EDIT: Oder muss ich erst den Inhalt mit "GetWindowsText()" herrausholen und dann prüfen? also so:

    Spielerzahl > GetWindowsText()....?

    Weil das Text stört michein wenig wenn ich mit zahlen arbeite^^ weiss ja nciht ob die funktion beides behandelt.. zumindest hat es ja mit SetWindowsText auch funktioniert^^



  • ne GetWindowText(...) und anschließend convertieren über stringstream



  • Danke. Werd mich dann da mal durchlesen zu den Strigstreams hab damit noch nicht so viel gemacht. Aber wird hoffendlich dann klappen^^



  • Also hab das mit dem Casten jetzt gemacht, aber dann spuckt der Compiler mir immer noch den Fehler aus das nicht gecastet wurde. Also Fehlermeldung ist:

    "invalid conversion from 'int' to 'char'"

    Mein Ziel ist es ja jetzt, int GerateneZahl, für die überprüfung mit "Zufallszahl" zu benutzen. Also wolte ich erstmal das ergebniss mittels GetWindowText, den Inhalt aus hBox2 speichern und dabei direkt casten:

    int GerateneZahl = static_cast<int> (GetWindowText(hBox2, szZahl, sizeof(szZahl)));
    

    kann ich das etwa nicht mit dem normalen C++ Cast machen? Oder wo liegt hier der fehler?



  • Fehlerbehandlung ist nicht enthalten

    #include <sstream>
    
    int laenge = GetWindowTextLength(hBox2);
    
    char* buf = new char[laenge+1];
    
    GetWindowText(hBox2, buf, laenge);
    
    std::stringstream convert;
    
    convert<<buf;
    int data;
    convert>>buf;
    
    if(buf....
    

  • Mod

    Ein C++ cast geht natürlich nciht.

    Verwende atoi, oder noch einfacher GetDlgItemInt!



  • Matyr schrieb:

    Fehlerbehandlung ist nicht enthalten

    #include <sstream>
    
    int laenge = GetWindowTextLength(hBox2);
    
    char* buf = new char[laenge+1];
    
    GetWindowText(hBox2, buf, laenge);
    
    std::stringstream convert;
    
    convert<<buf;
    int data;
    convert>>buf;
    
    if(buf....
    

    Danke für den Code. Allerdings funktionierts so auch nicht.
    Habs so auf meinen Fall bezogen. Also bis zur If-Anweisung geht alles klar, nur sobald ich eine If Bedingung mit:

    if (buf > Zufallszahl)...
    

    machen möchte meckert mein Compiler:

    ISO C++ forbids comparison between pointer and integer

    Werds dann mal mit dem GetDlgItemInt versuchen. Wie genau funktioniert das? Bzw habt ihr einen guten Link den man sich angucken könnte dazu?

    Gruss
    Gizm



  • sry mein Fehler

    der letzte teil sollte eig folgendes sein:

    int data;
    convert>>data;
    
    if(data...
    


  • Ah Danke. Jetzt funktioniert es. Hab mich auch schon gefragt wofür das Einsamme int Data wohl ist xD
    Jetzt muss icvh ja eigendlich nur noch eine Schleife drummherumm packen damit er nicht nur einmal fragt oder? Denn er Reagiert nur einmal auf das klicken. Muss ich da noch irgendetwas beachten? Irgendwie die EIngabe leeren und dann einfach alles nochmal? Also zB mit einer Do...While-Schleife?



  • kannst mit SetWindowText(...); lehren aber kein plan.

    Das ist schließlich dein Project, daher musst du schon selber wissen was du machen möchtest.
    Und alles sagen hilft ja auch nicht beschäftige dich erstmal damit was der source den ich gepostet habe überhaupt macht.

    Mfg. Matyr


Anmelden zum Antworten