|
了整个WM_CREATE的处理。
WM_PAINT讯息
WndProc处理的第二个讯息为WM_PAINT。这个讯息在Windows程式设计中是很重要的。当视窗显示区域的一部分显示内容或者全部变为「无效」,以致於必须「更新画面」时,将由这个讯息通知程式。
显示区域的显示内容怎么会变得无效呢?在最初建立视窗的时候,整个显示区域都是无效的,因为程式还没有在视窗上画什么东西。第一条WM_PAINT讯息(通常发生在WinMain中呼叫UpdateWindow时)指示视窗讯息处理程式在显示区域上画一些东西。
在使用者改变HELLOWIN视窗的大小後,显示区域的显示内容重新变得无效。读者应该还记得,HELLOWIN中wndclass结构的style栏位设定为标志CS_HREDRAW和CS_VREDRAW,这样的格式设定指示Windows,在视窗大小改变後,就把整个视窗显示内容当成无效。然後,视窗讯息处理程式将收到一条WM_PAINT讯息。
当使用者将HELLOWIN最小化,然後再次将视窗恢复为以前的大小时,Windows将不会保存显示区域的内容。在图形环境下,视窗显示区域涉及的资料量很大。因此,Windows令视窗无效,视窗讯息处理程式接收一条WM_PAINT讯息,并自动恢复其视窗的内容。
在移动视窗以致其相互重叠时,Windows不保存一个视窗中被另一个视窗所遮盖的内容。在这一部分不再被遮盖之後,它就被标志为无效。视窗讯息处理程式接收到一条WM_PAINT讯息,以更新视窗的内容。
对WM_PAINT的处理几乎总是从一个BeginPaint呼叫开始:
hdc = BeginPaint (hwnd, &ps) ;
而以一个EndPaint呼叫结束:
EndPaint (hwnd, &ps) ;
在这两个呼叫中,第一个参数都是程式的视窗代号,第二个参数是指向型态为PAINTSTRUCT的结构指标。PAINTSTRUCT结构中包含一些视窗讯息处理程式,可以用来更新显示区域的内容。我们将在下一章中讨论该结构的各个栏位。现在我们只在BeginPaint和EndPaint函式中用到它。
在BeginPaint呼叫中,如果显示区域的背景还未被删除,则由Windows来删除。它使用注册视窗类别的WNDCLASS结构的hbrBackground栏位中指定的画刷来删除背景。在 |