Main Content

将鼠标点击传递给组的父级

此示例演示一组对象如何将鼠标点击传递给父对象,该对象会作用于组中所有对象。

目标和设计

假设您想要对一组对象中任何一个成员点击鼠标,都会执行影响组中所有对象的鼠标按下回调。

  • 定义将添加到组中的图形对象。

  • 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