Konteksty urządzenia
Kontekst urządzenia to struktura danych systemu Windows zawierająca informacje o atrybutach rysunku urządzenia, takich jak wyświetlacz lub drukarka. Wszystkie wywołania rysunku są wykonywane za pośrednictwem obiektu kontekstu urządzenia, który hermetyzuje interfejsy API systemu Windows do rysowania linii, kształtów i tekstu. Konteksty urządzeń umożliwiają rysowanie niezależne od urządzenia w systemie Windows. Konteksty urządzenia mogą służyć do rysowania na ekranie, do drukarki lub do metapliku.
Obiekty CPaintDC hermetyzują wspólny idiom systemu Windows, wywołując BeginPaint
funkcję, a następnie rysując w kontekście urządzenia, a następnie wywołując EndPaint
funkcję. Konstruktor CPaintDC
wywołuje BeginPaint
metodę , a destruktor wywołuje metodę EndPaint
. Uproszczonym procesem jest utworzenie obiektu CDC , narysowanie CDC
, a następnie zniszczenie obiektu. W ramach większość tego procesu jest zautomatyzowana. W szczególności funkcja OnDraw
jest przekazywana już przygotowana CPaintDC
(za pośrednictwem OnPrepareDC
), a po prostu wciągniesz ją do niej. Jest on niszczony przez platformę, a podstawowy kontekst urządzenia jest zwalniany z systemu Windows po powrocie z wywołania funkcji OnDraw
.
Obiekty CClientDC hermetyzują pracę z kontekstem urządzenia, który reprezentuje tylko obszar klienta okna. Konstruktor CClientDC
wywołuje GetDC
funkcję, a destruktor wywołuje ReleaseDC
funkcję . Obiekty CWindowDC hermetyzują kontekst urządzenia, który reprezentuje całe okno, w tym jego ramkę.
Obiekty CMetaFileDC hermetyzują rysunek w metapliku systemu Windows. W przeciwieństwie do przekazanego CPaintDC
do OnDraw
metody , należy w tym przypadku samodzielnie wywołać metodę OnPrepareDC .
Rysowanie myszą
Większość rysunków w programie ramowym — a tym samym większość pracy kontekstowej urządzenia — jest wykonywana OnDraw
w funkcji składowej widoku. Można jednak nadal używać obiektów kontekstu urządzenia do innych celów. Aby na przykład przekazać opinię na temat śledzenia ruchu myszy w widoku, należy narysować bezpośrednio w widoku bez oczekiwania na OnDraw
wywołanie.
W takim przypadku można użyć obiektu kontekstu urządzenia CClientDC , aby rysować bezpośrednio w widoku.