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

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

Цель и проект

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

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

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

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

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

Иерархия объектов и ключевые свойства

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

Код MATLAB

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

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

  • groupCB - Локальная функция для hggroup коллбэк.

The 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

The groupCB коллбэк действует со всеми объектами, содержащимися в hggroup. The groupCB функция использует исходный аргумент коллбэка, переданный в коллбэк (src) для получения указателей на объекты закрашенной фигуры.

Использование исходного аргумента коллбэка (который является указателем на hggroup объект) устраняет необходимость создания глобальных данных или передачи дополнительных аргументов в коллбэк.

Щелчок левой кнопкой мыши по любой закрашенной фигуре изменяет цвет лица всей трёх закрашенных фигур на случайное значение цвета RGB.

function groupCB(src,~)
   s = src.Children;
   set(s,'FaceColor',rand(1,3))
end

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

Для просмотра документации необходимо авторизоваться на сайте