将鼠标点击传递给组的父级
此示例演示一组对象如何将鼠标点击传递给父对象,该对象会作用于组中所有对象。
目标和设计
假设您想要对一组对象中任何一个成员点击鼠标,都会执行影响组中所有对象的鼠标按下回调。
定义将添加到组中的图形对象。
将
hggroup
对象分配为图形对象的父级。定义一个任何对象被点击时都会执行的函数。将其函数句柄分配给
hggroup
对象的ButtonDownFcn
属性。将组中所有对象的
HitTest
属性设置为off
,从而让鼠标点击传递到对象父级。
对象层次结构和关键属性
本例使用以下对象层次结构。
MATLAB 代码
创建含有两个函数的文件:
pickPatch
- 创建图形对象的主函数。groupCB
-hggroup
回调的局部函数。
pickPatch
函数创建三个补片对象,并使 hggroup
对象成为其父级。设置每个补片的 HitTest
属性,从而将鼠标点击指向其父级。
function pickPatch figure x = [0 1 2]; y = [0 1 0]; hGroup = hggroup('ButtonDownFcn',@groupCB); patch(x,y,'b',... 'Parent',hGroup,... 'HitTest','off') patch(x+2,y,'b',... 'Parent',hGroup,... 'HitTest','off') patch(x+3,y,'b',... 'Parent',hGroup,... 'HitTest','off') end
groupCB
回调作用于 hggroup
中包含的所有对象。groupCB
函数使用传递给回调的回调源参量 (src
) 以获得补片对象的句柄。
使用回调源参量(hggroup
对象句柄)则无需创建全局数据将额外参量传递给回调。
在任何补片上左键点击都会将所有三个补片的面颜色改成随机 RGB 颜色值。
function groupCB(src,~) s = src.Children; set(s,'FaceColor',rand(1,3)) end
有关回调函数的详细信息,请参阅Create Callbacks for Graphics Objects