用MFC开发单文档程序,用到了OnMouseMove消息,但是这个函数里的InvalidateRect一开始无效
也就是在函数里直接加入InvalidateRect然后进入调试之后在窗口中拖动鼠标并没有发生重绘,但是如果按键消息里也有InvalidateRect,先按键,再拖动鼠标,...
也就是在函数里直接加入InvalidateRect然后进入调试之后在窗口中拖动鼠标并没有发生重绘,但是如果按键消息里也有InvalidateRect,先按键,再拖动鼠标,就正常执行了,窗口重绘了,也达到了我想要的效果。我想知道为什么会这样?
展开
2个回答
展开全部
楼主如果想要在
OnMouseMove
里引起重绘 ,我建议楼主不要这样做,这样是不会引起重绘,不知道楼主有没有听到过线程消息队列,队列分为发送、登记、虚拟、刷新等队列,以上顺序都是如果有相应队列的消息下一级消息是不会处理的。
OnMouseMove鼠标移动消息是属于虚拟,也就是驱动设备产生的消息,如键盘,鼠标等,如果一直有虚拟消息你看下顺序,刷新就不会处理。明白了吧!
建议楼主设个标志吧,然后强制刷新下。
OnMouseMove
里引起重绘 ,我建议楼主不要这样做,这样是不会引起重绘,不知道楼主有没有听到过线程消息队列,队列分为发送、登记、虚拟、刷新等队列,以上顺序都是如果有相应队列的消息下一级消息是不会处理的。
OnMouseMove鼠标移动消息是属于虚拟,也就是驱动设备产生的消息,如键盘,鼠标等,如果一直有虚拟消息你看下顺序,刷新就不会处理。明白了吧!
建议楼主设个标志吧,然后强制刷新下。
更多追问追答
追问
可是为什么我要是先按键盘的方向键再拖动鼠标就一切正常了呢?
追答
消息处理是非常快的,按完键就刷新了。
展开全部
你用到OnMouseMove函数,就要对它重载,当系统响应鼠标移动消息时,会调用你重载的函数,所以你按钮消息中需要加入InvalidateRect
更多追问追答
追问
有这个消息,按键是方向键,也有这个消息,但是运行的时候直接拖动完全没反应,按一下方向键在拖动就正常了,很困惑
追答
鼠标左键重载了吗
void CTestDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CDialog::OnLButtonDown(nFlags, point);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询