1.WinMain进入循环之前,通常会有UpdateWindow来向窗口过程投放WM_PAINT消息。
2.触发WM_PAINT消息的事件:之前隐藏的窗口部分重新可见;改变窗口的大小;ScrollWindow或ScrollDC滚动客户区;InvalidRect或者InvalidRgn显示产生WM_PAINT消息;而Validate则会将WM_PAINT取消掉。
3.程序应该组织成可以保留绘制客户区需要的所有信息。
4.客户区无效区域、有效区域的理解,处理WM_PAINT时,窗口过程可以通过GetUpdateRect获取无效区域的坐标。
5.设备描述表总是与显示器上的特定窗口相关。
6.WM_ERASEBKGND处理无效区域的擦除,并利用WNDCLASS.hbrbackground中的刷子属性填充无效区域。
7.PAINTSTRUCT结构。
8.InvalidateRect(hwnd,NULL,TRUE)使整个客户区无效,并擦除背景,如果最后一个参数位FALSE则不擦除背景。
9.获取设备描述表的方法:
1) hdc = BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps); 此方法仅在无效区域上画图
2) hdc = GetDC(hwnd);
ReleaseDC(hwnd,hdc); 此方法可在客户端任何区域上画图,且不会使无效变有效。
GetWindowDC,返回整个窗口的设备描述表,可修改窗口标题等。
2.触发WM_PAINT消息的事件:之前隐藏的窗口部分重新可见;改变窗口的大小;ScrollWindow或ScrollDC滚动客户区;InvalidRect或者InvalidRgn显示产生WM_PAINT消息;而Validate则会将WM_PAINT取消掉。
3.程序应该组织成可以保留绘制客户区需要的所有信息。
4.客户区无效区域、有效区域的理解,处理WM_PAINT时,窗口过程可以通过GetUpdateRect获取无效区域的坐标。
5.设备描述表总是与显示器上的特定窗口相关。
6.WM_ERASEBKGND处理无效区域的擦除,并利用WNDCLASS.hbrbackground中的刷子属性填充无效区域。
7.PAINTSTRUCT结构。
8.InvalidateRect(hwnd,NULL,TRUE)使整个客户区无效,并擦除背景,如果最后一个参数位FALSE则不擦除背景。
9.获取设备描述表的方法:
1) hdc = BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps); 此方法仅在无效区域上画图
2) hdc = GetDC(hwnd);
ReleaseDC(hwnd,hdc); 此方法可在客户端任何区域上画图,且不会使无效变有效。
GetWindowDC,返回整个窗口的设备描述表,可修改窗口标题等。
本文详细介绍了Windows绘图机制中的关键概念,包括如何通过不同方式获取设备描述表(hdc),触发WM_PAINT消息的条件,以及如何处理WM_PAINT消息进行有效的绘制。此外还解释了如何区分客户区的有效与无效区域,以及如何正确地使用InvalidateRect函数。
1024

被折叠的 条评论
为什么被折叠?



