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

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

Цель и дизайн

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

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

  • Присвойте объект 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
end

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

Была ли эта тема полезной?