Передача клика мыши родительскому элементу группы

В этом примере показано, как группа объектов может передать клик мыши родительскому элементу, который работает со всеми объектами в группе.

Цель и дизайн

Предположим, что вы хотите один клик мыши по любому члену группы объектов выполнить одну кнопку вниз коллбэк, влияющий на все объекты в группе.

  • Задайте графические объекты, которые будут добавлены к группе.

  • Присвойте hggroup возразите как родительский элемент графических объектов.

  • Задайте функцию, чтобы выполниться, когда по любому из объектов кликнут. Присвойте его указатель на функцию hggroup ButtonDownFcn объекта свойство.

  • Установите HitTest свойство каждого объекта в группе к off так, чтобы клик мыши был передан родительскому элементу объекта.

Object Hierarchy and Key Properties

Этот пример использует следующую иерархию объектов.

КОД MATLAB

Создайте файл с двумя функциями:

  • pickPatch — Основная функция, которая создает графические объекты.

  • groupCB — Локальная функция для hggroup 'callback'.

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

Для получения дополнительной информации о функциях обратного вызова см. Определение Коллбэка