C++ GetClipRgn的正确用法?
我想写一个函数,需要在DC上设置剪裁区域,但在完成后恢复DC上的任何现有剪裁区域 所以我发现,这听起来正是我想要的,但似乎令人困惑。我找不到任何使用它的例子,Petzold也没有提供任何东西 我想到的是:C++ GetClipRgn的正确用法?,c++,winapi,C++,Winapi,我想写一个函数,需要在DC上设置剪裁区域,但在完成后恢复DC上的任何现有剪裁区域 所以我发现,这听起来正是我想要的,但似乎令人困惑。我找不到任何使用它的例子,Petzold也没有提供任何东西 我想到的是: void DrawStuff( HDC hDC ) { HRGN restoreRegion = CreateRectRgn( 0, 0, 0, 0 ); if (GetClipRgn( hDC, restoreRegion ) != 1) { Dele
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 );
}
}
为了得到当前区域,我需要创建一个区域,这看起来很奇怪
这是正确的用法吗
有没有更好的方法来达到同样的效果?将
int-SelectClipRgn(\uu在HDC-HDC中,\uu在HRGN-HRGN中)代码>做这个工作
SelectClipRgn函数选择一个区域作为指定设备上下文的当前剪辑区域
仅使用选定区域的副本。可以为任何数量的其他设备上下文选择区域本身,也可以将其删除
SelectClipRgn函数假定以设备单位指定区域的坐标
要删除设备上下文的剪辑区域,请指定空区域句柄。最接近正确答案的是Hans Passant的注释:
是的,这是一个奇怪的函数。你的代码看起来不错
我使用以下命令和功能:
SaveDC功能保存指定设备的当前状态
上下文(DC),通过复制描述选定对象和图形的数据
模式(如位图、画笔、调色板、字体、笔、区域、绘图
模式和映射模式)到上下文堆栈
感觉更干净。您真的需要一个“小”区域(通常称为“感兴趣区域-ROI”)作为整个客户端区域的一个子部分吗?GetClientRect()将为您提供完整的可绘制区域。剪辑区域用于获取该区域的一部分。是的,这是一个奇怪的函数。您的代码看起来不错。@Hans-谢谢,我现在感觉好多了。可能是我使用过的最奇怪的win32函数。。。