主要内容

捕捉鼠标点击

控制对鼠标单击的响应的属性

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

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

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

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

编程对鼠标点击的响应

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

  • 属性的回调函数,则执行其按下按钮函数ButtonDownFcn财产,MATLAB®执行这个回调。

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

请注意

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

请注意

如果坐标轴PickableParts属性设置为“没有”,子轴不能捕获鼠标单击。在这种情况下,所有的鼠标点击都被图形捕获。

PickablePart/HitTest值的组合

使用PickableParts而且HitTest属性来实现以下行为:

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

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

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

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

轴PickableParts PickableParts HitTest 鼠标点击结果

可见/所有

可见(默认)

(默认)

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

可见/所有

所有

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

可见/都没有

没有一个

开/关

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

没有一个

可见/都没有

开/关

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

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

通过鼠标点击层级

考虑下面的对象及其层次结构PickableParts而且HitTest属性设置。

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

函数pickHit f =数字;Ax =轴;P = patch(rand(1,3),rand(1,3),‘g’);L = line([1 0],[0 1]);集(f,“ButtonDownFcn”@ (~ ~) disp (“图”),...“HitTest”“关闭”)设置(ax,“ButtonDownFcn”@ (~ ~) disp (“轴”),...“HitTest”“关闭”)组(p,“ButtonDownFcn”@ (~ ~) disp (“补丁”),...“PickableParts”“所有”“FaceColor”“没有”)组(l,“ButtonDownFcn”@ (~ ~) disp (“行”),...“HitTest”“关闭”结束

点击直线

左键单击该行:

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

  • 该行将命中传递给最近的祖先(父轴),但轴不能执行命中ButtonDownFcn回调,因此坐标轴将命中传递给图形。

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

点击补丁

补丁FaceColor没有一个.然而,补丁PickableParts所有,因此您可以通过单击空面和边缘来选择补丁。

补丁HitTest属性是因此,补丁可以成为当前对象。当补丁成为当前对象时,它执行它的button down回调。