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 没有意义吗?的主要内容,如果未能解决你的问题,请参考以下文章