关于CVI中的“鼠标按键事件”

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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”很好的诠释了这个应用。

相关文档
最新文档