WinAPI区域没有意义吗



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

Win32 API已有30年历史;里面有很多向后兼容性的代码。有一个完全正常的InvalidateRect

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

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

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

为什么Windows不直接发明一个返回更新区域的BeginPaintExAPI?因为添加一个API是非常昂贵的,并且需要有充分的理由。添加一个不添加任何值的函数(在本例中(是很难证明的。

最新更新