Zeichnen auf Desktop
-
Hallo,
Wie man auf dem Desktop malt ist mir eigentlich bekannt.
Aber es schmiert irgentwie immer. Wie kann ich ein "refresh" machen?
Vgl. F5 beim Desktop.Danke!
-
InvalidateRect für den Desktop?! Was meinst du mit schmieren
-
Hallo,
ich denke du kannst den Desktop so neu zeichnen lassen:
InvalidateRect(NULL, NULL, TRUE); RedrawWindow(NULL,NULL,NULL,RDW_INVALIDATE|RDW_ERASENOW|RDW_FRAME);
-
Also ich habs jetzt so, aber funzt net.
Es "schmiert" immer noch.
Und GDI-Leaks sind auch drin (vermutlich).// Includes #include <windows.h> // Programmanfang int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { // Vars POINT lpPoint; HDC hDesk; BOOL bRun = true; DWORD st; // Zeit Init st = GetTickCount(); // Hauptschleife while(bRun){ // Mauskoordinaten GetCursorPos(&lpPoint); // Context holen hDesk = GetDC(NULL); // Leeren InvalidateRect(NULL, NULL, TRUE); RedrawWindow(NULL,NULL,NULL,RDW_INVALIDATE|RDW_ERASENOW|RDW_FRAME); // Linie zeichnen LineTo(hDesk, lpPoint.x, lpPoint.y); // Weiter laufen | beenden if((GetTickCount() - st) > 10000) bRun = false; } // Beenden return 0; }
-
Kann denn jemand schnell mal den Code testen?
Danke!
-
Hi,
habs getestet! Komme zum selben Ergebnis! Lieg wahrscheinlich daran, dass sich der Desktop erst wieder aufbauen muss!MFG
Alexander Sulfrian
-
Außerdem gibt das eine Prozessorauslastung von 100 %. Das ist doch Schwachsinn.
-
Alexander Sulfrian schrieb:
Hi,
habs getestet! Komme zum selben Ergebnis! Lieg wahrscheinlich daran, dass sich der Desktop erst wieder aufbauen muss!MFG
Alexander Sulfrian
Genau darum geht es ja! Wie mach ich das?
Danke!
-
,,,,,,,,,,, schrieb:
Außerdem gibt das eine Prozessorauslastung von 100 %. Das ist doch Schwachsinn.
Sehr produktiv....
-
Das geht überhaupt nicht. Sorry!
-
Wie macht das dann meine Testatur, die grüne Balken für die Lautstärke auf den Bildschirm malt?
-
vielleicht ist es ein fenster ohne rahmen und mit regions?
-
Mach nen Screenshot vom Desktop, erzeug dann nen Fullscreen-Fenster und zeichne da den Screenshot rein und mal rum
-
reckt schrieb:
vielleicht ist es ein fenster ohne rahmen und mit regions?
Nicht ein wenig aufwendig?
http://www.brain-death.net/Image2.jpg
-
guck doch einfach mal mit spy++ oder ähnlichem nach, ob es ein fenster ist.
finde es nicht zu aufwendig. es gibt ja z.B. auch tools mit denen man aus bilder diese regions erzeugen kann.
-
Bei InvalidateRect würde ich nicht NULL für hWnd einsetzen:
If this parameter is NULL, the system invalidates and redraws all windows, and sends the WM_ERASEBKGND and WM_NCPAINT messages to the window procedure before the function returns.
Nimm lieber GetDesktopWindow();
-
Nene, ich werds wohl mit Regions machen, macht das Tastatur-Programm laut Spy++ auch...
ciao
-
hier gibt es das passende tool dafür: http://www.webfritzi.de.vu
-
Vielleicht auch noch das hier
-
Danke, danke!
Kenn ich aber schon alles
-
ich hab das hier nicht alles gelesen, aber das hier funzt z.b.
#include <windows.h> int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { RECT rect; rect.bottom=100; rect.left=0; rect.right=100; rect.top=0; HDC hdc; hdc=CreateDC("DISPLAY", NULL, NULL, NULL); Rectangle(hdc, 0, 0, 100, 100); Sleep(1000); InvalidateRect(WindowFromDC(hdc), &rect, TRUE); return 0; }
nach der 1s wird das fenster sauber neu gezeichnet