Opis funkcji GetDC (...)
dla określonego okna zwraca uchwyt kontekstu urządzenia obszaru roboczego okna (jest to obszar okna bez paska tytułowego, menu i pasków przewijania).
Public Declare Function GetDC _ Lib "user32.dll" Alias "GetDC" _ (ByVal hwnd As Long) As Long
- argumenty:
- hwnd
- Uchwyt okna, którego kontekst urządzenia chcemy pobrać. Jeśli wartość ta jest równa ZERO, funkcja GetDC(...) zwraca uchwyt kontekstu urządzenia ekranu.
- zwraca:
-
Przy powodzeniu funkcja zwraca uchwyt kontekstu urządzenia, przy niepowodzeniu funkcja zwraca ZERO.
Kilka uwag o stosowaniu funkcji GetDC(...).
- Za pomocą funkcji GetDC(...) uzyskujemy uchwyt kontekstu urządzenia roboczego obszaru okna i możemy wykonywać operacje graficzne na obszarze roboczym okna. Nie mamy natomiast możliwości wykonywania operacji graficznych na pasku tytułowym okna, menu i paskach przewijania. Do tego celu będzie potrzebna opisana niżej funkcja GetWindowDC(...)
- Po zakończeniu operacji graficznych w kontekście urządzenia hdc, powinniśmy użyć funkcji ReleaseDC(...) w celu zwolnienia kontekstu urządzenia hdc. Nie zwalnianie kontekstu urządzenia okna może mieć poważny wpływ na inne uruchamiane procesy graficzne oraz doprowadzić do wyczerpania zasobów systemowych w wyniku tzw. „wycieków pamięci” (memory leak).
• Uchwyt kontekstu urządzenia całego okna Windows.
Jeżeli chcemy wykonać operacje graficzne na dowolnym obszarze okna Windows, łącznie z paskiem tytułowym, menu i paskami przewijania, musimy pobrać uchwyt kontekstu urządzenia (hdc) odnoszący się do całego obszaru okna. Uchwyt ten możemy pobrać za pomocą funkcji GetWindowDC(...), która:
Opis funkcji GetWindowDC (...)
Dla określonego okna zwraca uchwyt kontekstu urządzenia całego obszaru okna. Zwrócony kontekst urządzenia okna umożliwia malowanie w dowolnym miejscu okna, ponieważ źródłem kontekstu urządzenia jest lewy górny róg okna, a nie obszar roboczy okna.
Public Declare Function GetWindowDC _ Lib "user32.dll" Alias "GetWindowDC" _ (ByVal hwnd As Long) As Long
- argumenty:
- hwnd
- Uchwyt okna, którego kontekst urządzenia chcemy pobrać. Jeśli wartość ta jest równa ZERO, funkcja GetWindowDC(...) zwraca uchwyt kontekstu urządzenia ekranu.
- zwraca:
-
Przy powodzeniu funkcja zwraca uchwyt kontekstu urządzenia, przy niepowodzeniu funkcja zwraca ZERO.
Kilka uwag o stosowaniu funkcji GetWindowDC(...).
- Za pomocą funkcji GetWindowDC(...) uzyskujemy uchwyt kontekstu urządzenia całego okna i możemy wykonywać operacje graficzne na całym obszarze oknie, łącznie z paskiem tytułowym, menu i paskami przewijania.
-
Po zakończeniu operacji graficznych w kontekście urządzenia hdc, powinniśmy użyć funkcji ReleaseDC(...)
w celu zwolnienia kontekstu urządzenia hdc. Nie zwalnianie kontekstu urządzenia okna może mieć poważny
wpływ na inne uruchamiane procesy graficzne oraz doprowadzić do wyczerpania zasobów systemowych w wyniku
tzw. „wycieków pamięci” (memory leak).
• Zwalnianie kontekstu urządzenia (DC).
Każdy kontekst urządzenia przechowuje atrybuty graficzne kontekstu, takie jak kolor rysowania, grubość linii, jej styl, rodzaj czcionki. Oznacza to, że każdy kontekst zajmuje w systemie pewne zasoby Dlatego, po zakończeniu operacji graficznych, gdy tylko kontekst urządzenia hdc przestaje nam być potrzebny, powinniśmy go zwolnić, zwalniając w ten sposób wszystkie związane z nim zasoby. Zwalnianie kontekstu urządzenia (DC) realizujemy za pomocą funkcji ReleaseDC(...), która:
Opis funkcji ReleaseDC (...)
Zwalnia kontekst urządzenia o uchwycie hdc i utworzony dla określonego okna hwnd.
Public Declare Function ReleaseDC _ Lib "user32" Alias "ReleaseDC" _ (ByVal hwnd As Long, _ ByVal hdc As Long) As Long
- argumenty:
- hwnd
- uchwyt okna, dla którego utworzony kontekst urządzenia będzie zwalniany.
- hdc
- uchwyt zwalnianego kontekstu urządzenia
- zwraca:
-
Przy powodzeniu, gdy kontekst urządzenia został zwolniony, funkcja zwraca 1. W przeciwnym wypadku, gdy kontekst urządzenia nie został zwolniony, funkcja zwraca ZERO.
Kilka uwag o stosowaniu funkcji ReleaseDC(...).
- Dla każdego wywołania funkcji GetWindowDC(...) oraz funkcji GetDC(...), pobierających kontekst urządzenia DC musi nastąpić wywoływać funkcję ReleaseDC(...).
- Nie można używać funkcji ReleaseDC(...) do zwolnienia kontekstu urządzenie DC utworzonego przez wywołanie funkcji CreateDC(...). Zamiast tego musi skorzystać z funkcji DeleteDC(...).
- Funkcja ReleaseDC(...) musi zostać wywołane w tego samego wątku, w którym została wywołana funkcja GetDC(...) lub GetWindowDC(...).