??当鼠标移动稍快就会出现,本pe.x==700但i没有++。
在MouseMove中的代码,先获得鼠标的坐标再:
if(pe.x==700)
{
static i=0;
i++;
Label1->Caption =IntToStr(i);
}
??当鼠标移动稍快就会出现,本pe.x==700但i没有++。
为什么?及相关知识解答?
谢啦,
我也试过if(600<pe.x<700)用区间但也未实现!
[解决办法]
设置下断点,看if(pe.x==700)有没有执行到这里
[解决办法]
MouseMove是消息事件,当鼠标快速移动时,要完全捕捉到鼠标在某一点的信息是很难的,一来与Windows的消息机制有关,也与鼠标灵敏度有关。改为区间后捕捉鼠标信息的几率要大多了,如if (pe.x > 600 && pe.x <= 700)
[解决办法]
不可能 ,估计没有正好pe.x==700,mousemove消息并不是你移动每个像素都发的,这样系统承受不了
[解决办法]
熟悉下mousemove的机制吧:鼠标每经过一个像素,会发送一个消息WM_MOUSEMOVE到系统消息列表,当某个时间段比如1us里重复收到WM_MOUSEMOVE消息时,采用覆盖式接受的方法,即该时间段最后接受到的那个消息。这样就造成了一个表象:mousemove是按时间间隔触发的。
第一个问题解决方案;
可以记录鼠标上一次的位置lx,ly。然后在当次进行比对。
if(lx<600&&pe.x>700)// 表示鼠标在一个时间间隔内经过了该区域
{
i++;
}
else if(pe.x > 600 && pe.x <= 700)//表示鼠标当前就在该区域。移动一次,i++
{
i++;
}
问题2:无解。