WM_PAINT aktualisieren
-
Hi
Erstmal mein code:
case WM_PAINT: { hDC = BeginPaint(hWnd, &ps); { ShowRam(hDC,hWnd); } EndPaint(hWnd, &ps); break; }ShowRam soll den Vollen und Leeren Arbeitsspeicher ANzeigen.
Wenn ich Das Programm starte, wird der Aktuelle Zustand angezeigt, aber der Aktualisiert sich nicht
Wie kann ich das Problem lösen??
-
@RedEagle, WM_PAINT feuert nur wenn Windows meint, dass etwas neu gezeichnet werden muss. Das was du suchst ist ein Timer. Schau dir mal die Funktion SetTimer an. Damit kannst alle n-Sekunden etwas ausführen lassen...in deinem Fall die Anzeige aktualisieren.
-
@herrmann
wieder nicht ganz richtig
oder verstehe ich dich einfach nicht 
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/pantdraw_4zef.asp
msdn schrieb:
The UpdateWindow function updates the client area of the specified window by sending a WM_PAINT message to the window
-
Doch Richtig!

Wenn er etwas ständig updaten will, ohne den normalen Ablauf zu stöhren nimmt er einen Timer und in der Timerproc schreibt er:RECT rc; GetClientRect(hwnd,&rc); RedrawWindow(hwnd,&rc,NULL, RDW_ERASE | RDW_INVALIDATE);somit wird WM_PAINT aufgerufen und deine Ausgabe Aktuellisiert.
Besser wäre es in RECT rc die Position und Größe des Anzeigebereichs anzugeben, damit das nicht flackert, btw. nicht zu stark.
-
wenn es so gemeint war, dann stimme ich zu

-
jo, Danke.
Hab's jetzt so gemacht:///Zur Aktualisierung: static long oldTime=0; long newTime = GetTickCount(); if(newTime - oldTime >= 2000) //Länger als 2 sec { GetClientRect(hWnd,&rect); RedrawWindow(hWnd,&rect,NULL, RDW_ERASE | RDW_INVALIDATE); oldTime = newTime; } ///
-
Geht auch, wenn Du nur InvalidateRect() verwendest:
InvalidateRect( hwnd, 0, TRUE ); // legt den gesamten Fensterbereich // in die Update-Region des Fensters