在Windows中一定有很多「闲置时间」,在这个时间内,所有讯息伫列为空,Windows只停在一个小回圈中等待键盘或者滑鼠输入。我们能否在闲置时间内获得控制,绘制矩形,并且只在有讯息加入程式的讯息伫列之後才释放控制呢?这就是PeekMessage函式的目的之一。下面是PeekMessage呼叫的一个例子:
前面的四个参数(一个指向MSG结构的指标、一个视窗代号、两个值指示讯息范围)与GetMessage的参数相同。将第二、三、四个参数设定为NULL或0时,表明我们想让PeekMessage传回程式中所有视窗的所有讯息。如果要将讯息从讯息伫列中删除,则将PeekMessage的最後一个参数设定为PM_REMOVE。如果您不希望删除讯息,那么您可以将这个参数设定为PM_NOREMOVE。这就是为什么Peek_Message是「偷看」而不是「取得」的原因,它使得程式可以检查程式的伫列中的下一个讯息,而不实际删除它。
GetMessage不将控制传回给程式,直到从程式的讯息伫列中取得讯息,但是PeekMessage总是立刻传回,而不论一个讯息是否出现。当讯息伫列中有一个讯息时,PeekMessage的传回值为TRUE(非0),并且将按通常方式处理讯息。当伫列中没有讯息时,PeekMessage传回FALSE(0)。
这使得我们可以改写普通的讯息回圈。我们可以将如下所示的回圈:
替换为下面的回圈: