为何OnMouseMove消息响应如此慢?

susdj 2001-04-30 04:00:00
OnMouseMove消息在单步执行很正常,但是直接运行就不行。不过鼠标移的很慢也可以,为什么?在消息内是否需要对CPoint的坐标进行ScreenToClient转换?
...全文
314 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu_feng_fly 2001-04-30
  • 打赏
  • 举报
回复
有一个函数,是GetGapture(),可以使你省一个bool变量
yf_000 2001-04-30
  • 打赏
  • 举报
回复
同意楼上,用SetCapture()和ReleaseCapture()可以很好的解决这个问题!!
判断矩形是否包含点的函数名是:
CRect rc;
rc.PtInRect(point);
fancy21 2001-04-30
  • 打赏
  • 举报
回复
如果你只是要判断鼠标是否进入控件或者离开,为什么不用 SetCapture 呢?这样,不管鼠标是否在你的控件上,这个控件都可以得到消息,你只需要判断鼠标坐标是否在控件内就可以了。如果不在控件内,则表示移出,同时 ReleaseCapture,待下一次 MouseMove 事件的时候,再 SetCapture,……如此反复!

设置 1 个变量表示鼠标是否在控件上,如 BOOL mouseIn
假设从鼠标消息得到的坐标点为 CPoint p
控件所在矩形区假设为 CRect r
那么在相关消息处理函数中可能写如下代码
if (r包含(p) && !mouseIn) {
SetCapture();
执行鼠标进入需要执行的函数
}
else if (!r包含(p)) {
ReleaseCapture();
执行鼠标移出需要执行的函数
}

对不起,判断矩形是否包含点的函数名我忘了,你自己查查MSDN 吧
fancy21 2001-04-30
  • 打赏
  • 举报
回复
触发消息以及执行相应的程序代码总是需要时间的,而在这段时间内,你的鼠标光标可能已经移动了好几个点了。所以,没办法!
至于坐标是否转换,得你自己看着办——反正从消息中得到的坐标是 Screen 的。
山中涛大爷 2001-04-30
  • 打赏
  • 举报
回复
你是否进行了大量的数据处理和绘图操作,如果是的话,建议你用多线程。
susdj 2001-04-30
  • 打赏
  • 举报
回复
我是从鼠标移动时判断是否进入控件或者离开,并产生响应的事件,是否有其他的方法呢?
joke100 2001-04-30
  • 打赏
  • 举报
回复
鼠标移动很快时,系统会合并一些鼠标移动的消息.
以前有个例子是在鼠标移动消息处理为当前鼠标位置设置特定颜色的像素点,
当快速移动鼠标时,就会发现这些点并不连续,只有慢速移动鼠标才是连续的.
不过因为间隔很小,对一般的应用都不会有什么坏的影响

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧