如果我们在处理 WM_PAINT 期间在 BeginPaint 期间只有 RECT,您能否解释一下为什么 WinAPI 需要 InvalidateRgn 及其要添加到更新区域 (hRgn) 的区域的句柄?提前致谢!
问问题
114 次
2 回答
1
Win32 API 大约有 30 年的历史;那里有很多代码用于向后兼容。有一个完全理智的人InvalidateRect
。
话虽如此,调用InvalidateRgn
withbErase=TRUE
将擦除非矩形区域。
于 2021-03-23T14:02:21.150 回答
1
要求特定(复杂)更新区域是一个极其罕见的用例。该系统针对最常见的用例进行了优化,其中应用程序使用矩形使窗口的脏区域无效并跟踪。这就是调用BeginPaint时得到的结果。
如果在极少数情况下需要更新区域,则可以调用GetUpdateRgn。由于BeginPaint
验证更新区域,您必须GetUpdateRegion
在此之前调用。
为什么 Windows 不直接发明一个BeginPaintEx
返回更新区域的 API?因为添加 API 的成本高得令人难以置信,而且需要有充分的理由。添加一个不增加任何值的函数(如本例所示)很难证明是合理的。
于 2021-03-23T15:12:53.460 回答