捕捉鼠标点击
控制对鼠标单击的响应的属性
有两个属性决定对象是否以及如何响应鼠标点击:
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回调。