主要内容

获取鼠标点击

控制鼠标响应的属性

有两个属性决定对象是否以及如何响应鼠标点击:

  • PickableParts-确定对象是否捕获鼠标点击

  • HitTest-确定对象是否可以响应它捕获的鼠标点击或将点击传递给它最近的祖先。

对象将单击传递到对象层次结构中,直到到达可以响应的对象。

编写鼠标点击的响应程序

当对象捕获并响应鼠标点击时,对象:

  • 响应于鼠标左键单击,执行其按钮关闭功能 - 如果对象定义了回调ButtonDownFcn财产,MATLAB®执行这个回调。

  • 显示上下文菜单以响应鼠标右键-如果对象使用快捷菜单属性时,MATLAB调用此上下文菜单。

请注意

数字没有一个PickableParts财产。图执行按钮回调函数,而不管其设置HitTest财产。

请注意

如果轴PickableParts属性设置为“没有”,坐标轴子节点不能捕获鼠标点击。在本例中,图捕获了所有鼠标点击。

PickablePart/HitTest值的组合

使用PickablePartsHitTest属性来实现以下行为:

  • 点击对象捕获鼠标点击和响应按钮向下回调或上下文菜单。

  • 单击对象捕获鼠标单击并将鼠标单击传递给它的祖先之一,它可以用按钮向下回调或上下文菜单进行响应。

  • 单击对象不捕获鼠标单击。鼠标点击可以被被点击对象后面的对象捕获。

该表根据属性值总结了鼠标单击的响应。

轴PickableParts PickableParts HitTest 鼠标点击结果

可见/所有

可见(默认)

ON(默认)

单击对象的可见部分执行按钮向下回调或调用上下文菜单

可见/所有

全部

单击对象的任何部分,即使不可见,也会使对象成为当前对象并执行按下按钮回调或调用上下文菜单

可见/都没有

没有一个

开/关

单击对象永远不会使它成为当前对象,也永远不会执行按下按钮回调或调用上下文菜单

没有一个

可见/都没有

开/关

单击任何坐标轴子对象都不会执行按钮向下回调或调用上下文菜单

MATLAB搜索祖先使用属性,直到找到合适的祖先或达到图为止。

鼠标点击层次结构向上传递

考虑以下对象及其层次结构PickablePartsHitTest属性设置。

这段代码创建了层次结构:

功能pickHit f = figure;ax =轴;p =补丁(兰德(1,3),兰德(1、3)‘g’);L = line([1 0],[0 1]);集(f,'buttondownfcn'@ (~ ~) disp ('数字'),...'抓住'“关闭”)设置(ax,'buttondownfcn'@ (~ ~) disp ('轴'),...'抓住'“关闭”)设置(p,'buttondownfcn'@ (~ ~) disp (“补丁”),...“PickableParts”“所有”“FaceColor”“没有”)组(l,'buttondownfcn'@ (~ ~) disp (“行”),...'抓住'“关闭”结束

单击该行

左键单击该行:

  • 行成为当前对象,但不能执行它的ButtonDownFcn回调,因为它HitTest属性是

  • 这一行将hit传递给最近的祖先(父轴),但该祖先不能执行它ButtonDownFcn回调,轴将命中传递给图形。

  • 图可以执行它的回调,因此MATLAB显示数字在命令窗口中。

点击补丁

补丁FaceColor没有一个.然而,补丁PickableParts全部,你可以通过点击空白的面和边缘来选择补丁。

补丁HitTest属性是所以补丁可以变成当前对象。当补丁成为当前对象时,它执行它的按下按钮回调。