while (peekmessage(&msg))
{
f (msg.message == WM_LBUTTONDOWN || msg.message == WM_RBUTTONDOWN)
{
int index_i = msg.y / 300;
int index_j = msg.x / 300;
if (arr[index_i][index_j] == '-')
arr[index_i][index_j] = pawn;
if (pawn == 'X')
pawn = 'O';
else if (pawn == 'O')
pawn = 'X';
}
}
检验键鼠操作并进行对应数据变化时,用while(peekmessage(...)); 并在其主体中书写逻辑;而非直接写入 peekmessage(..); 其原因在于 当进行键鼠操作时,每次操作之间存在时间间隙,而每次在这个间隙中,单独写成peekmessage(...); 无法达成 只有操作时 才 执行此处代码逻辑的效果。 而while(peekmessage(..)); 利用了 当消息为空时 返回值为false, , 从而达到了 只有 进行键鼠操作时 才执行while中的代码块。
上文代码中不难发现如果用getmessage(...) 替代 while(peekmessage(..)); 后程序仍然是可以正常运行的,且实现了 每次操作才执行的逻辑的。 实质上,此处如果用getmessage(...) 函数 替代 while(peekmessage(...)); 实现的功能并不是 当没有消息时不执行 该操作对应的代码逻辑,而是实现的 没有消息 时 整个程序停下 等待 接收该消息,当传入消息后,getmessage(...); 后面的代码才会进行执行。