用MFC开发单文档程序,用到了OnMouseMove消息,但是这个函数里的InvalidateRect一开始无效

也就是在函数里直接加入InvalidateRect然后进入调试之后在窗口中拖动鼠标并没有发生重绘,但是如果按键消息里也有InvalidateRect,先按键,再拖动鼠标,... 也就是在函数里直接加入InvalidateRect然后进入调试之后在窗口中拖动鼠标并没有发生重绘,但是如果按键消息里也有InvalidateRect,先按键,再拖动鼠标,就正常执行了,窗口重绘了,也达到了我想要的效果。我想知道为什么会这样? 展开
 我来答
倨孔鞍吞低寡N
2013-08-25 · 超过10用户采纳过TA的回答
知道答主
回答量:24
采纳率:0%
帮助的人:30.2万
展开全部
楼主如果想要在
OnMouseMove
里引起重绘 ,我建议楼主不要这样做,这样是不会引起重绘,不知道楼主有没有听到过线程消息队列,队列分为发送、登记、虚拟、刷新等队列,以上顺序都是如果有相应队列的消息下一级消息是不会处理的。

OnMouseMove鼠标移动消息是属于虚拟,也就是驱动设备产生的消息,如键盘,鼠标等,如果一直有虚拟消息你看下顺序,刷新就不会处理。明白了吧!
建议楼主设个标志吧,然后强制刷新下。
更多追问追答
追问
可是为什么我要是先按键盘的方向键再拖动鼠标就一切正常了呢?
追答
消息处理是非常快的,按完键就刷新了。
百度网友635c934
2013-08-21 · TA获得超过100个赞
知道答主
回答量:76
采纳率:0%
帮助的人:54.6万
展开全部
你用到OnMouseMove函数,就要对它重载,当系统响应鼠标移动消息时,会调用你重载的函数,所以你按钮消息中需要加入InvalidateRect
更多追问追答
追问
有这个消息,按键是方向键,也有这个消息,但是运行的时候直接拖动完全没反应,按一下方向键在拖动就正常了,很困惑
追答
鼠标左键重载了吗
void CTestDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CDialog::OnLButtonDown(nFlags, point);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式