windows - Forskel mellem GetDC () og BeginPaint ()

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg arbejder på Win32 UI. Jeg vil gerne vide forskellen mellem GetDC og BeginPaint. Hvornår skal du bruge hvilken API og hvornår du ikke bruger hvilken API.

Bedste reference


GetDC returnerer simpelthen håndtaget til enhedens kontekst, som altid kan bruges til at lave din egen tegning. BeginPaint på den anden side forbereder vinduet til maleri og giver også information om, hvad der skal males (f.eks. Om baggrunden har brug for gentemaling og det rekt, der skal males).


Eksempler på hvornår man skal bruge hver? BeginPaint ses mest set inde i WM\_PAINT-håndteringsprogrammer (MSDN: En applikation skal ikke kalde BeginPaint undtagen som svar på en WM\_PAINT-besked. Hvert kald til BeginPaint skal have et tilsvarende opkald til EndPaint-funktionen.). GetDC kan bruges overalt, så hvis du vil tegne på et eksternt vindue. Dybest set, når som helst, det er ikke i en WM\_PAINT-handler. BeginPaint og EndPaint har også en vis indflydelse på caret. Læs msdn for flere detaljer.

Andre referencer 1


GetDC () er ikke en erstatning for Start + EndPaint (). Hvis du prøver, vil du opdage, at din brugergrænseflade begynder at brænde 100\% cpu-kernen, og din WM\_PAINT-handler bliver kaldt igen og igen.


Den store er BeginPaint (), det rydder vinduets opdateringsområde. Værdien af ​​PAINTSTRUCT.rcPaint. WM\_PAINT genereres, så længe vinduet har et beskidt rektangel, der er oprettet af et InvalidateRect () opkald ved enten vindueshåndteringen eller dit program, der udtrykkeligt kalder det. BeginPaint () rydder det.

Andre referencer 2


BeginPaint er beregnet til kun at blive kaldt som svar på WM\_PAINT beskeden. Enhedskonteksten opnået af den peger på det ugyldige (til-be-redrawn) område af vinduet. Det skal derefter udgives ved hjælp af EndPaint.


GetDC kan kaldes til enhver tid. Enhedskonteksten opnået af den peger på hele klientområdet i vinduet. For at frigive det, skal du ringe ReleaseDC.