Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

correct usage of GetClipRgn?

Tags:

c++

winapi

I want to write a function that needs to set the clipping region on a DC but restore any existing clipping region on the DC when it is done.

So I found GetClipRgn which sounds like exactly what I want but seems confusing. I couldn't find any examples of using it and Petzold had nothing to offer.

What I came up with was this:

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 );
    }
}

It just seems weird that I need to create a region in order to get the current region.

Is this correct usage?

Is there are better way to achieve the same effect?

like image 939
markh44 Avatar asked Aug 13 '10 15:08

markh44


2 Answers

Well the closest thing to a correct answer is Hans Passant's comment:

Yeah, it's a weird function. Your code looks okay.

like image 132
markh44 Avatar answered Oct 05 '22 10:10

markh44


I use the SaveDC and RestoreDC functions:

The SaveDC function saves the current state of the specified device context (DC) by copying data describing selected objects and graphic modes (such as the bitmap, brush, palette, font, pen, region, drawing mode, and mapping mode) to a context stack.

It feels cleaner.

like image 23
jnm2 Avatar answered Oct 05 '22 10:10

jnm2