+ -
当前位置:首页 → 问答吧 → 鼠标移动导致InvalidateRect产生的PAINT被忽略

鼠标移动导致InvalidateRect产生的PAINT被忽略

时间:2011-12-28

来源:互联网

while (TRUE)
{
if (PeekMessage (&msg, NULL, 0, 0,PM_REMOVE))  
{  
if (msg.message == WM_QUIT)
{
break;
}

TranslateMessage (&msg) ;  
DispatchMessage (&msg) ;  

  else
  {
  f();
  }
  Sleep(1);
}
f()做一些累加,然后f调用InvalidateRect产生WMPAINT。
结果只要鼠标在窗口上一直移动,则f一直不被调用。

如果去掉else,鼠标仍然移动,则f被调用,一直累加,但f产生的WMPAINT的处理结果一直不出现。

总之只要鼠标在窗口上一直移动,画面就卡住了。

作者: mengfeihong   发布时间: 2011-12-28

建议启动个定时器来发送刷新消息

作者: zgl7903   发布时间: 2011-12-28

f()做一些累加,然后f调用InvalidateRect产生WMPAINT。
结果只要鼠标在窗口上一直移动,则f一直不被调用。
================
这个很容易理解,因为鼠标一直在移动,那么if (PeekMessage (&msg, NULL, 0, 0,PM_REMOVE))  
一直为真,后面的else当然执行不到了。

如果去掉else,鼠标仍然移动,则f被调用,一直累加,但f产生的WMPAINT的处理结果一直不出现。
================
这个也容易理解,因为WM_PAINT消息的优先级比较低,只有没有别的消息时才会发送,因为鼠标一直动,总会有别的消息出现,所以WM_PAINT不会得到响应的。

作者: wltg2001   发布时间: 2011-12-28

热门下载

更多