Kontekst urządzenia w WinApi - GetDC a BeginPaint

0

Cześć, zacznę może od tego, że obudowuję sobie WinApi w klasy. Jedną z klas jest DeviceContext (kontekst urządzenia), który (na chwilę obecną) składa się m.in. z: tła, pióra, pędzla i różnych funkcji służących do rysowania.
Konstruktor tej klasy (nie wchodząc w szczegóły) wygląda tak:

DeviceContext::DeviceContext(HWND h_win) : pen(&hdc), brush(&hdc), background(&hdc)
	{
	hdc = GetDC(h_win);
	h_window = h_win;
	saving_number = 0;
	}

Zacząłem się jednak zastanawiać nad używaniem obiektu owej klasy w wiadomości WM_PAINT, w której to domyślnie wykorzystuje się funkcję BeginPaint().
No i mam pytanie (wątpliwość), czy zamiast funkcji BeginPaint() mogę z powodzeniem wykorzystywać GetDC() z dodaniem InvalidateRect() oraz ValidateRect()?

Czy funkcja BeginPaint() robi coś jeszcze?

Moja wątpliwość wynika ze struktury tagPAINTSTRUCT, która zawiera jakieś 3 zmienne (fRestore, fIncUpdate, rgbReserved[32]), które są przetwarzane przez system.

1

Podstawowa zasada w WinAPI to aby nie walczyć z Windowsem, tylko z nim współpracować. Skoro do rysowania normalnie używa się BeginPaint/EndPaint, to tego się trzymaj.
Jeśli rysowanie odbywa się inaczej (nie przez GDI) to w miejsce EndPaint trzeba dać ValidateRect.

Dokumentacja mówi

MSDN napisał(a)

The BeginPaint function automatically sets the clipping region of the device context to exclude any area outside the update region. The update region is set by the InvalidateRect or InvalidateRgn function and by the system after sizing, moving, creating, scrolling, or any other operation that affects the client area. If the update region is marked for erasing, BeginPaint sends a WM_ERASEBKGND message to the window.

— ale nie wiadomo czego nie mówi. Jakieś niuanse zawsze są, nie rezygnowałbym z funkcji tylko dlatego że nie pasuje ci do obiektowej koncepcji...

0

@Azarien chyba masz rację... W takim razie dodam drugi konstruktor typu DeviceContext(HDC hdc) co chyba rozwiąże problem ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1