Quiero escribir una función que necesite establecer la región de recorte en un DC pero restaurar cualquier región de recorte existente en el DC cuando esté terminado.uso correcto de GetClipRgn?
Encontré GetClipRgn
que suena exactamente como lo que quiero, pero me parece confuso. No pude encontrar ningún ejemplo de usarlo y Petzold no tenía nada que ofrecer.
Lo que ocurrió fue esto:
void DrawStuff(HDC hDC)
{
HRGN restoreRegion = CreateRectRgn(0, 0, 0, 0);
if (GetClipRgn(hDC, restoreRegion) != 1)
{
DeleteObject(restoreRegion);
restoreRegion = NULL;
}
//
// Set new region, do drawing
//
SelectClipRgn(hDC, restoreRegion);
if (restoreRegion != NULL)
{
DeleteObject(restoreRegion);
}
}
Sólo parece extraño que necesito para crear una región con el fin de obtener la región actual.
¿Es este uso correcto?
¿Hay alguna forma mejor de lograr el mismo efecto?
¿Realmente necesita una región "pequeña" (generalmente denominada "Región de interés - ROI") que es una parte parcial del área de cliente completa? GetClientRect() le dará el área dibujable completa. Las regiones de clip son para obtener una parte de esa área. – JustBoo
Sí, es una función extraña. Tu código se ve bien. –
@ Hans - gracias, ahora me siento mejor. Probablemente la función win32 más extraña que he usado ... – markh44