WinAPI Region 没有意义吗?

Posted

技术标签:

【中文标题】WinAPI Region 没有意义吗?【英文标题】:WinAPI Is Region meaningless? 【发布时间】:2021-06-20 04:36:26 【问题描述】:

如果我们在处理 WM_PAINT 期间在 BeginPaint 期间只有 RECT,那么您能否解释一下为什么 WinAPI 需要 InvalidateRgn 及其要添加到更新区域 (hRgn) 的区域的句柄? 提前致谢!

【问题讨论】:

"我们只有 RECT" 你可以在 GetUpdateRgn 里面 WM_PAINT,在 BeginPaint 之前做。 谢谢 dxiv。 【参考方案1】:

Win32 API 大约有 30 年的历史;那里有很多代码用于向后兼容。有一个完全理智的InvalidateRect

话虽如此,用bErase=TRUE 调用InvalidateRgn 将擦除非矩形区域。

【讨论】:

感谢您的回复。这始终是向后兼容性的问题。当然。但是谁阻止微软添加像 BeginPaintEx 这样的东西来处理区域......这就是问题...... 我猜微软开发 WinAPI 的开发人员的数量可以用一只手来数。【参考方案2】:

要求特定(复杂)更新区域是一种极为罕见的用例。该系统针对最常见的用例进行了优化,其中应用程序使用矩形使窗口的脏区域无效并跟踪。这就是您拨打BeginPaint 时得到的信息。

如果您在极少数情况下需要更新区域,您可以致电GetUpdateRgn。由于BeginPaint 验证更新区域,您必须在此之前调用GetUpdateRegion

为什么 Windows 不直接发明一个返回更新区域的BeginPaintEx API?因为添加 API 的成本高得令人难以置信,而且需要有充分的理由。添加一个不增加任何值的函数(如本例)很难证明是合理的。

【讨论】:

以上是关于WinAPI Region 没有意义吗?的主要内容,如果未能解决你的问题,请参考以下文章

HBase Shell手动移动Region

Spark 读取 Hbase 优化 --手动划分 region 提升并行数

halcon仿射变换demo

halcon仿射变换demo

WinAPI 库有命名空间吗?

它是 Winapi 的 WIC(Windows 映像组件)和 DirectX 部分吗? [关闭]