据我了解,调用WM_PAINT
之类的函数时不会生成InvalidateRect
消息;而是可以将其视为可以设置为包含有关 dirty 区域的某些信息的标志的对象,并且在处理队列中的其他消息时,会生成单个WM_PAINT
消息自最后一条成功的WM_PAINT
消息以来,它结合了所有标志的区域。大概每个与特定线程相关联的HWND都要执行一次
我想知道WM_TIMER
消息是如何累积的?我认为可能只会保留每个线程的最新标志,但是如果不同的TIMERPROC和窗口句柄具有不同的计时器该怎么办。如果两个不同间隔的SetTimer
调用指向相同的窗口句柄,该怎么办;每个计时器ID都会生成一个WM_TIMER
吗?
答案 0 :(得分:3)
如果两个具有不同间隔的SetTimer调用指向同一窗口句柄,该怎么办;每个计时器ID会生成一个WM_TIMER吗?
是的,每个不同的计时器都会生成一条消息。
您明确声明“具有不同的间隔”。但这不是一个因素。重要的是计时器标识,由计时器ID定义。您可以有多个具有相同间隔的不同计时器。
可能发生的是,如果消息队列的服务频率不如逻辑上生成的事件那么频繁,则计时器事件可以合并。因此,如果两次调用消息之间经过多个计时器间隔,则只会生成一条计时器消息。不要将计时器事件视为指示已消耗了多少计时器,而应将其视为至少已经过指定的时间间隔。