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

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

Цель и дизайн

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

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

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

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

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

Object Hierarchy and Key Properties

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

КОД 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

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