关于CVI中的“鼠标按键事件”
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于CVI中的“鼠标按键事件”- Daniel Zhou
关于CVI中的“鼠标按键事件”
需要特别留意三个事件:
EVENT_COMMIT;
EVENT_LEFT_CLICK;
EVENT_LEFT_DOUBLE_CLICK;
鼠标单击,就会触发“EVENT_LEFT_CLICK”,但是如果鼠标单击过快就只会触发“EVENT_COMMIT”了,因为此时属于“EVENT_LEFT_DOUBLE_CLICK”。
如果希望“EVENT_LEFT_CLICK”和“EVENT_LEFT_DOUBLE_CLICK”获得一样的结果,那么就让两个Case共用同一段代码。
case EVENT_LEFT_CLICK:
case EVENT_LEFT_DOUBLE_CLICK:
/* insert code here*/
break
需要特别留意的事情,就是在编译器内Debug的时候,消息响应可能会丢失一些,而不会完全像我们想的那样。这样的情况下,建议Build一个程序出来测试一下。
注意:如果希望检测按键被长按一定时间,再采取响应的情况,需要用按键状态配合定时器来实现。
用“GetRelativeMouseState”可以很可靠的帮助我们返回鼠标相对某个Button的位置以及它是否按下。然后根据鼠标左边和按下的状态共同完成条件确认。
例如:
////Check if Add botton pressed
GetRelativeMouseState (panelHandle,
PANEL_INCREMENT,
&mouse_x, &mouse_y,
&LEFT_KEY_DOWN, &RIGHT_KEY_DOWN,
NULL);
if(LEFT_KEY_DOWN &&
mouse_x>0 &&
mouse_x mouse_y>0 && mouse_y { TimerWorking = TRUE; SetCtrlVal (panelHandle, PANEL_COUNT, ++CountNub); } 时间响应的顺序为:先响应Click或者是Double Click,然后在按键释放的时候会响应COMMIT事件。CVI培训Core 1中的例子“Exercise 2-7”很好的诠释了这个应用。