exponenta event banner

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

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

Цель и дизайн

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

  • Определите графические объекты, добавляемые в группу.

  • Назначить 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 object) устраняет необходимость создания глобальных данных или передачи дополнительных аргументов в обратный вызов.

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

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

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