本文最新链接地址:http://lifepeak.net/it-jishu/wm_paint-wm_erasebkgnd.html
在做窗口界面优化的时候,正确的处理WM_PAINT和WM_ERASEBKGND是很重要的,不管是先产生WM_ERASEBKGND还是WM_PAINT.
在处理OnPaint时采用如下方法:
PAINTSTRUCT PS;
HDC hdc = BeginPaint(&PS);
做相关GDI操作
EndPaint(&PS);
处理OnEraseBkgnd时采用如下方法:
return 1;
第一种情况(WM_PAINT消息产生在前,WM_ERASEBKGND消息产生在后)
BeginPaint会检测是否删除背景,如果是,发送WM_ERASEBKGND(当WM_PAINT手动(由InvalidateRect等函数)产生时)
第二种情况(WM_PAINT消息产生在后,WM_ERASEBKGND消息产生在前)
在处理WM_PAINT之前已经处理了WM_ERASEBKGND
如果处理WM_ERASEBKGND消息时返回FALSE,BeginPaint标记pt.fErase 为TRUE,如果处理WM_ERASEBKGND时返回TRUE,BeginPaint标记pt.fErase为FALSE.WM_ERASEBKGND返回TRUE和返回FALSE是一个规范,一般情况下没有什么区别,但是如果什么时候用到了,会根据函数返回值判断后续处理。因此最好按照要求返回数据.