http://blog.csdn.net/alien75/article/details/6023377
个人在实际使用中的体会(基于WINCE),不具有权威性。
1、GetUpdateRect是获得需要刷新的无效区域,在调用了InvalidRect后可以用这个函数来获得无效区域,但是如果在之前调用了BeginPaint/EndPaint则取到的无效区域为空,这也是为什么要在WM_PAINT中调用BeginPaint的原因。在需要做局部刷新的时候这个函数很有用。2、GetClipBox是获得裁剪区域大小,在很多时候最终效果是和GetUpdateRect相同的。但是有两点不太相同的
1)在InvalidateRect触发WM_PAINT后直接调用GetClipBox取得的可显示区域是和GetUpdateRect取得的无效区域是一样的
2)看GetClipBox的返回值(NULLREGION、SIMPLEREGION、COMPLEXREGION、RGN_ERROR)可以得知,第一种和第二种情况和GetUpdateRect相同(无效区域无或有),而第三种情况在需要进行复杂不规则图形局部刷新时很有用也更有效率,
补充:根据BitBlt在贴图的时候如果是有效区域则跳过来看,应该是GDI的优化机制,这个与region关系不大。所以提倡在WM_PAINT中用BeginPaint来画图的深层次目的就是为了利用GDI的优化机制进行无效区域管理及局部绘图提高效率,而用GetDC主动画图获得的是全屏无效区域,想局部刷新就必须用户自已来管理无效区域或使用裁剪区域功能。GetUpdateRect和GetUpdateRgn获得的数据应该是系统记录的,在BeginPaint后就被reset了