如果我们在处理WM_PAINT时在BeginPaint期间只有RECT,您能解释一下为什么WinAPI需要InvalidateRgn及其要添加到更新区域(hRgn(的区域句柄吗?提前感谢!
Win32 API已有30年历史;里面有很多向后兼容性的代码。有一个完全正常的InvalidateRect
。
话虽如此,用bErase=TRUE
调用InvalidateRgn
将擦除非矩形区域。
要求特定(复杂(的更新区域是一种极为罕见的用例。该系统针对最常见的用例进行了优化,即应用程序使用矩形使窗口的脏区域无效并跟踪。这就是调用BeginPaint时得到的结果。
如果您在极少数情况下需要更新区域,您可以调用GetUpdateRgn。由于BeginPaint
验证更新区域,因此在此之前必须调用GetUpdateRegion
。
为什么Windows不直接发明一个返回更新区域的BeginPaintEx
API?因为添加一个API是非常昂贵的,并且需要有充分的理由。添加一个不添加任何值的函数(在本例中(是很难证明的。