有两个属性决定对象是否以及如何响应鼠标点击:
PickableParts
-确定对象是否捕获鼠标点击
HitTest
-确定对象是否可以响应它捕获的鼠标点击或将点击传递给它最近的祖先。
对象将单击传递到对象层次结构中,直到到达可以响应的对象。
当对象捕获并响应鼠标点击时,对象:
响应于鼠标左键单击,执行其按钮关闭功能 - 如果对象定义了回调ButtonDownFcn
财产,MATLAB®执行这个回调。
显示上下文菜单以响应鼠标右键-如果对象使用快捷菜单
属性时,MATLAB调用此上下文菜单。
请注意
数字没有一个PickableParts
财产。图执行按钮回调函数,而不管其设置HitTest
财产。
请注意
如果轴PickableParts
属性设置为“没有”
,坐标轴子节点不能捕获鼠标点击。在本例中,图捕获了所有鼠标点击。
使用PickableParts
和HitTest
属性来实现以下行为:
点击对象捕获鼠标点击和响应按钮向下回调或上下文菜单。
单击对象捕获鼠标单击并将鼠标单击传递给它的祖先之一,它可以用按钮向下回调或上下文菜单进行响应。
单击对象不捕获鼠标单击。鼠标点击可以被被点击对象后面的对象捕获。
该表根据属性值总结了鼠标单击的响应。
轴PickableParts | PickableParts | HitTest | 鼠标点击结果 |
---|---|---|---|
可见/所有 |
可见(默认) |
ON(默认) |
单击对象的可见部分执行按钮向下回调或调用上下文菜单 |
可见/所有 |
全部 |
在 |
单击对象的任何部分,即使不可见,也会使对象成为当前对象并执行按下按钮回调或调用上下文菜单 |
可见/都没有 |
没有一个 |
开/关 |
单击对象永远不会使它成为当前对象,也永远不会执行按下按钮回调或调用上下文菜单 |
没有一个 |
可见/都没有 |
开/关 |
单击任何坐标轴子对象都不会执行按钮向下回调或调用上下文菜单 |
MATLAB搜索祖先使用父
属性,直到找到合适的祖先或达到图为止。
考虑以下对象及其层次结构PickableParts
和HitTest
属性设置。
这段代码创建了层次结构:
功能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
属性是在
所以补丁可以变成当前对象。当补丁成为当前对象时,它执行它的按下按钮回调。