【发布时间】:2010-08-13 15:09:01
【问题描述】:
我想编写一个函数,需要在 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 );
}
}
我需要创建一个区域才能获得当前区域,这似乎很奇怪。
这是正确的用法吗?
有没有更好的方法来达到同样的效果?
【问题讨论】:
-
您真的需要一个“小”区域(通常称为“感兴趣区域 - ROI”),它是整个客户区的子部分吗?GetClientRect() 将为您提供完整的可绘制区域. 剪辑区域用于获取该区域的一部分。
-
是的,这是一个奇怪的功能。您的代码看起来不错。
-
@Hans - 谢谢我现在感觉好多了。可能是我用过的最奇怪的win32函数了……