c ++ - Tegn på skærmen med GDI + (eller GDI) svarende til Inspect

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at tegne på skærmen (hele skærmen, oven på hvert andet vindue) ved hjælp af GDI +.

Jeg har sendt NULL til GetDC for at få en HDC til skærmen, og derefter brugt det til at oprette et grafikobjekt og brugte DrawRectangle til at tegne rektangler på skærmen.

Alt fungerer .. undtagen ... det indre af rektanglet vil ikke blive opdateret.


Som om jeg tegner det over en kommandoprompt og bevæger kommandoprompten, forbliver indersiden af ​​rektanglet sort.
Jeg forventer at se hvad der er under rektanglet.


Her er koden, der gør tegningen ..


Pen BluePen(Color(255, 0, 255, 0), 2);
Graphics graphics(screenDC);
graphics.DrawRectangle(&BluePen, myRect);


Ganske enkelt, så er der noget, jeg skal gøre for at få indersiden af ​​rektanglet til at opdatere, når skærmen gør? Eller for at få det sikkert gennemsigtigt.


================= EDIT =================


Nå havde jeg givet op på dette og antog, at det ikke var muligt, indtil ... Jeg indså, at inspektionsværktøjet, der følger med Windows SDK, gør dette perfekt.


Jeg vil gerne genskabe noget, der ligner højdepunktet rektangel, og hvis jeg vælger et vindue (som Firefox) og så bringer Inspektionen i fokus, kan jeg flytte det rundt frit med alt, der opdateres perfekt.
Der er ikke engang noget flimrende.


Så ... ved nogen, hvordan Inspect klarer sig at gøre dette?


Også svar i GDI i stedet for GDI + er fine ...

Bedste reference


I vinduer er skærmen (og vinduerne ...) overfladen (e) ... flygtige, som sandkasser. Den 'overlappende' af vinduer og re-maling af afdækkede overflader er en illusion lavet af ordentlig arrangementshåndtering.


Alt er trukket forbliver der, indtil der er trukket noget andet over det.
'Afdækning' en overflade gør vinduet, der repræsenterer den overflade, til at modtage en WM\_PAINT-besked. Det er op til vinduesproceduren at reagere på den besked ved at maler alt, der skal være under det.


Nu, medmindre du aflyser en eller anden måde WM\_PAINT-beskeden, der sendes til skrivebordet vinduet, har du stort set ingen chance for at vide, at skrivebordet har brug for en gentagelse, og derfor vil din malkode ikke blive kaldt, og der vil ikke blive nogen gentagelse. Eller bedre sker det kun efter skrivebordet vinduet opdatering kode, at 'er ikke opmærksom på din maling.