正确使用GetClipRgn?

mar*_*h44 7 c++ winapi

我想编写一个函数,需要在DC上设置剪切区域,但在完成时恢复DC上的任何现有剪切区域.

所以我发现GetClipRgn哪些听起来就像我想要的那样,但似乎令人困惑.我找不到任何使用它的例子,Petzold没有提供任何东西.

我想出的是:

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 );
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要创建一个区域才能获得当前区域,这似乎很奇怪.

这是正确的用法吗?

是否有更好的方法来达到同样的效果?

mar*_*h44 4

最接近正确答案的是 Hans Passant 的评论:

是的,这是一个奇怪的功能。你的代码看起来没问题。