同步和异步绘图

【勇芳软件工作室】汉化HomePreviousNext

处理WM_PAINT消息期间执行的大多数绘图是异步的;也就是说,在窗口的一部分无效的时间和发送时间WM_PAINT之间存在延迟。在延迟期间,应用程序通常从队列中检索消息并执行其他任务。延迟的原因是Windows通常将窗口中的绘图视为低优先级操作,并且像在WM_PAINT之前将处理可能影响窗口的位置或大小的用户输入消息和消息一样。

在某些情况下,应用程序需要同步绘制__,即在使窗口的一部分无效后立即绘制窗口。典型的应用程序在创建窗口后立即绘制其主窗口,以向用户发出应用程序已成功启动的信号。Windows同步绘制一些控制窗口,例如按钮,因为这样的窗口作为用户输入的焦点。虽然可以同步绘制具有简单绘图程序的任何窗口,但所有这样的绘图都应该快速完成,并且不应该干扰应用程序响应用户输入的能力。

UpdateWindowRedrawWindow功能允许进行同步绘图。如果更新区域不为空,UpdateWindow将直接向窗口发送WM_PAINT消息。RedrawWindow还发送一个WM_PAINT消息,但是给应用程序更好的控制如何绘制窗口,例如是否绘制非客户区域和窗口背景,还是发送消息,而不管更新区域是否为空。这些功能将WM_PAINT消息直接发送到窗口,而不管应用程序消息队列中其他消息的数量如何。

任何需要花费时间的绘图操作的窗口都应该被异步绘制,以防止挂起的窗口被阻止。而且,经常使窗口的小部分无效的任何应用程序应允许这些无效部分合并成单个异步WM_PAINT消息,而不是一系列同步的WM_PAINT消息。