Gezeichnete Werte aktuallisieren



  • Hallo zusammen,ich bins schon wieder.
    Ich hab mir ein Menu gemacht und zum Testen eine Variable angelegt(int) ,und jedem Menupunkt ist eine andere Zahl zugeordnet.

    Jetzt hab ich beim WM_PAINT it stringstream die variable in LPCWSTR umgewandelt und dann mit TextOut ausgegeben.

    Doch wenn ich jetzt während des Progs einen anderen Menupunkt wähle,sich also die variable verändert,hab ich immernoch die selbe zahl dargestellt.

    Wie kann man das jetzt lösen,dass sich also das TextOut aktuallisiert.

    Vielen Dank


  • Mod

    Verwende InvalidateRect!



  • Aber ich hab kein Rect beim zeichnen.Ich hab das Folgendermassen gemacht:

    hdc = BeginPaint(hWnd, &ps);
    
    		//Font laden
    		LogFont.lfStrikeOut = 0;
            LogFont.lfUnderline = 0;
            LogFont.lfHeight = 20;
            LogFont.lfEscapement = 0;
            LogFont.lfItalic = TRUE;
    
            font = CreateFontIndirect(&LogFont);
            SelectObject(hdc, font);
    
            TextOut(hdc,10,10,_T("Ausgewählt:"),11);
    		TextOut(hdc,10,30,_T("Klasse:"),7);
    		sss << Klasseint; //sss ist ein stringstream
    		ss = sss.str();  //ss ist ein string
    		TextOut(hdc,60,30,(LPCWSTR)ss.c_str(),1);
    		TextOut(hdc,10,270,_T("Wert:"),5);
    
    	    DeleteObject(font);
    
            EndPaint(hWnd, &ps);
    


  • Das Problem ist, dass die zahl nur dann aktualisiert wird, wenn die WM_PAINT-Nachricht an dieses Fenster geschickt wird. Da du wahrscheinlich beim Klick diese Nachricht nicht abschickst (was du auch nicht machen solltest), wird die Zahl auch nicht aktualisiert. Versuche doch lieber Den klick in der WM_COMMAND-Nachricht abzufangen und von da aus die Zahl zu ändern. Vielleicht einfach ein statisches Textfeld erzeugen und den Wert mit SetWindowtext() ändern.

    kleiner Tipp: bei

    TextOut(hdc,60,30,(LPCWSTR)ss.c_str(),1);
    

    kannst du auch ss.length() anstatt 1 schreiben (Sicherheitsaspekt).



  • Danke ,könnte man nicht eigendlich auch bei jeder IDM_...abfrage immer eine paintstructur aufmachen,den text mit Textout inschreiben??


  • Mod

    Nein. Gezeichnet wird nur auf Anforderung in WM_PAINT.
    In den Handlern für die Menüpunkte setzt und merkst Du nur den Status und gibst den Befehl für das Neuzeichnen mit InvalidateRect.

    Woher soll Windows wissen, was in Deinem Fenster gezeichnet werden soll, wenn es minimiert und wieder maximiert wird. Der einmal gezeichnete Inhalt wird nicht persistent gespeichert sondern immer neu gezeichnet wenn Bedarf dafür ist.
    Deshalb sollte nur in WM_PAINT gezeichnet werden.

    Lies mal ein Grundlagenbuch.


Anmelden zum Antworten