3 Stimmen

Windows zwingen, den gesamten Bildschirm neu zu zeichnen

Ich zeichne derzeit Grafiken mit GDI, aber ich muss in der Lage sein, den gesamten Desktop/Bildschirm neu zu zeichnen. Meine Grafiken werden auf dem Bildschirm gezeichnet, aber wenn ich ein gezeichnetes Pixel verschieben würde, würde es zu einer Linie werden, weil ich den Bildschirm nicht neu zeichne (Windows tut das auch nicht). Ich brauche etwas, um das Neuzeichnen des gesamten Bildschirms zu erzwingen, ich habe die folgenden Ansätze ausprobiert:

UpdateWindow(GetDesktopWindow() );

InvalidateRect( GetDesktopWindow(), NULL, TRUE );

SendMessage( GetDesktopWindow(), WM_PAINT, NULL, NULL );

Keiner von ihnen scheint zu funktionieren, ich brauche nur den gesamten Bildschirm neu zu zeichnen.

0 Stimmen

Warum machen Sie all diese Dinge mit dem Desktop-Fenster und nicht mit Ihrem eigenen Fenster? Das Desktop-Fenster ist das Fenster, in dem das Hintergrundbild angezeigt wird, und jedes andere Fenster erscheint darüber...

0 Stimmen

Ich habe nämlich kein eigenes Fenster, und ich weiß, was es bewirkt. Ich zeichne auf dem Desktop selbst, indem ich das Handle des Desktops verwende.

1 Stimmen

Warum erstellen Sie kein transparentes Vollbildfenster?

2voto

rusxg Punkte 98

Wenn Sie trotzdem erzwingen wollen, dass der gesamte Desktop neu gezeichnet wird, können Sie

RECT rect;
::GetClientRect(::GetDesktopWindow(), &rect);
::RedrawWindow(::GetDesktopWindow(), &rect, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN);

0 Stimmen

Nicht einmal mit RDW_ERASENOW anstelle von RDW_ERASE y NULL anstelle von ::GetDesktopWindow() Es funktioniert!

1voto

Jay Punkte 288

Am besten ist es, den vorherigen Pixelzustand/die vorherige Farbe zu speichern und ihn/sie wiederherzustellen, wenn Sie das Pixel verschieben. Das Neuzeichnen des gesamten Bildschirms scheint zu viel Aufwand und eine schreckliche Verschwendung von Ressourcen zu sein.

1 Stimmen

Ich stimme mit Jay überein... Bei voller Auffrischung würde dein Bildschirm wie verrückt flackern!

0 Stimmen

Das Speichern jeder Pixelposition die ganze Zeit und die Änderung würde wahrscheinlich alles unglaublich langsam machen, meinst du nicht? Es muss eine Möglichkeit geben, Windows zu zwingen, nur einen Abschnitt neu zu zeichnen, der von mir aus die vorherige Position sein kann.

1voto

Survarium Punkte 180

Sie können verwenden RedrawWindow mit hWnd auf NULL gesetzt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X