Этот пример показывает, как группа объектов может передать клик мыши родительскому элементу, который работает со всеми объектами в группе.
Предположим, что вы хотите единственный клик мыши по любому члену группы объектов выполнить единственную кнопку вниз обратный вызов, влияющий на все объекты в группе.
Задайте графические объекты, которые будут добавлены к группе.
Присвойте объект hggroup
как родительский элемент графических объектов.
Задайте функцию, чтобы выполниться, когда по любому из объектов кликнут. Присвойте его указатель на функцию свойству ButtonDownFcn
объекта hggroup
.
Установите свойство HitTest
каждого объекта в группе к off
так, чтобы клик мыши был передан родительскому элементу объекта.
Этот пример использует следующую иерархию объектов.
Создайте файл с двумя функциями:
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
Для получения дополнительной информации о функциях обратного вызова см. Определение Обратного вызова