Opis funkcji CreateCompatibleDC (...)
Funkcja CreateCompatibleDC(...) tworzy pamięciowy kontekst urządzenia (DC) zgodny z kontekstem urządzenia o określonym uchwycie hdc:
Public Declare Function CreateCompatibleDC _ Lib "gdi32" Alias "CreateCompatibleDC" _ (ByVal hdc As Long) As Long
- argumenty:
- hdc
- uchwyt istniejącego kontekstu urządzenia. Jeśli wartość ta jest równa ZERO, funkcja CreateCompatibleDC(...) tworzy kontekst urządzenia zgodny z ekranem
- zwraca:
-
Przy powodzeniu funkcja zwraca uchwyt pamięciowego kontekstu urządzenia, przy niepowodzeniu funkcja zwraca ZERO.
Kilka uwag o pamięciowym kontekście urządzenia.
-
Jak sama nazwa wskazuje pamięciowy kontekst urządzenia istnieje tylko w pamięci. Nie jest to więc
rzeczywiste urządzenie wyjściowe. Jest ono określane, jako kontekst urządzenia „kompatybilny”
z rzeczywistym kontekstem. Bezpośrednio po utworzeniu, kontekst urządzenia jest monochromatyczny
i jego szerokość oraz wysokość wynosi 1 piksel, a wszystkie atrybuty ustawione są
na wartości domyślne.
-
Pamięciowy kontekstu urządzenia możemy używać jak zwykły kontekst urządzenia. Można ustawić
dla niego niestandardowe wartości atrybutów, pobierać aktualne wartości atrybutów kontekstu oraz
wybierać pióra, pędzle i regiony kontekstu.
-
Funkcja CreateCompatibleDC(...) może być używana tylko z urządzeniami obsługującymi operacje rastrowe.
Aby określić, czy urządzenie obsługuje operacje rastrowe, należy wywołać funkcję
GetDeviceCaps(...)
-
Jeśli hdc ma wartość ZERO, wątek wywołujący funkcję CreateCompatibleDC(...) jest właścicielem
utworzonego uchwytu hdc. Kiedy ten wątek zostanie zniszczony, uchwyt hdc będzie już nieważny.
Tak więc, jeśli zostanie utworzony uchwyt hdc i następnie przekazany do innego wątku,
to po zakończeniu pierwszego wątku, drugi wątek nie będzie mógł korzystać z uchwytu hdc.
-
Po zakończeniu operacji graficznych na utworzonym pamięciowym kontekście urządzenia
hdc, powinniśmy użyć funkcji DeleteDC(...) w celu usunięcia z pamięci niepotrzebnego
kontekstu urządzenia hdc. Można również wywołać funkcję
DeleteObject(...),
aby usunąć kontekst urządzenia DC, ale zalecanym sposobem jest użycie funkcji DeleteDC(...)
- Pozostawianie w pamięci niepotrzebnych kontekstów urządzenia 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).
• Usuwanie pamięciowego kontekstu urządzenia.
Po zakończeniu wykonywania operacji graficznych w pamięciowym kontekście urządzenia, musimy zwolnić ten kontekst (DC) za pomocą funkcji DeleteDC, która:
Opis funkcji DeleteDC (...)
Usuwa pamięciowy kontekst urządzenia (DC) o określonym uchwycie hdc
Public Declare Function DeleteDC _ Lib "gdi32" Alias "DeleteDC" _ (ByVal hdc As Long) As Long
- argumenty:
- hdc
- uchwyt kontekstu urządzenia
- zwraca:
-
Przy powodzeniu funkcja zwraca wartość różną od ZERA, przy niepowodzeniu funkcja zwraca ZERO.
Kilka uwag o stosowaniu funkcji GetDC(...).
-
Nie może usunąć kontekstu urządzenia, którego uchwyt uzyskano poprzez wywołanie
funkcji GetDC(...).
By tak uzyskany kontekst urządzenia usunąć, należy wywołać funkcję ReleaseDC(...) - Po zakończeniu operacji graficznych na utworzonym pamięciowym kontekście urządzenia hdc, powinniśmy zawsze używać funkcji DeleteDC w celu usunięcia z pamięci niepotrzebnego kontekstu urządzenia hdc. Pozostawianie w pamięci niepotrzebnych kontekstów urządzenia 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).