Существует два свойства, которые определяют, реагируют ли объекты на щелчки мыши:
PickableParts - Определяет, захватывает ли объект щелчки мыши
HitTest - определяет, может ли объект реагировать на щелчок мыши, который он захватывает, или передает щелчок своему ближайшему предку.
Объекты проходят щелчок по иерархии объектов до достижения объекта, который может ответить.
Когда объект захватывает и реагирует на щелчок мыши, объект:
Выполняет функцию нажатия кнопки в ответ на щелчок левой кнопкой мыши - если объект определяет обратный вызов для ButtonDownFcn MATLAB ® выполняет обратный вызов.
Отображение контекстного меню в ответ на щелчок правой кнопкой мыши - если объект определил контекстное меню с помощью команды ContextMenu MATLAB вызывает это контекстное меню.
Примечание
Фигуры не имеют PickableParts собственность. Фигуры выполняют функции обратного вызова кнопки независимо от установки их HitTest собственность.
Примечание
Если оси PickableParts свойство имеет значение 'none', дочерние оси не могут фиксировать щелчки мыши. В этом случае все щелчки мыши захватываются фигурой.
Используйте PickableParts и HitTest для реализации следующих вариантов поведения:
Щелчок по объекту фиксирует щелчок мыши и отвечает обратным вызовом кнопки вниз или контекстным меню.
Кликнутый объект захватывает щелчок мыши и передает щелчок мыши одному из своих предков, который может ответить с помощью обратного вызова кнопки или контекстного меню.
Выбранный объект не захватывает щелчок мыши. Щелчок мыши может быть зафиксирован объектами, находящимися позади выбранного объекта.
Эта таблица суммирует ответ на щелчок мыши на основе значений свойств.
| Элементы выбора осей | PickableParts | HitTest | Результат щелчка мыши |
|---|---|---|---|
видимые/все | видимый (по умолчанию) | on (по умолчанию) | При щелчке по видимым частям объекта выполняется обратный вызов кнопки или вызывается контекстное меню |
видимые/все | все | на | Щелчок любой части объекта, даже если он не виден, делает объект текущим и выполняет обратный вызов кнопки или вызывает контекстное меню |
видимые/все/нет | ничего | вкл ./выкл. | Щелчок по объекту никогда не делает его текущим объектом и никогда не может выполнить обратный вызов кнопки или вызвать контекстное меню |
ничего | видимые/все/нет | вкл ./выкл. | Щелчок по каким-либо дочерним объектам осей никогда не приводит к выполнению обратного вызова кнопки или вызову контекстного меню |
MATLAB выполняет поиск предков с помощью Parent свойство каждого объекта до нахождения подходящего предка или достижения фигуры.
Рассмотрим следующую иерархию объектов и их PickableParts и HitTest параметры свойств.

Этот код создает иерархию:
function pickHit f = figure; ax = axes; p = patch(rand(1,3),rand(1,3),'g'); l = line([1 0],[0 1]); set(f,'ButtonDownFcn',@(~,~)disp('figure'),... 'HitTest','off') set(ax,'ButtonDownFcn',@(~,~)disp('axes'),... 'HitTest','off') set(p,'ButtonDownFcn',@(~,~)disp('patch'),... 'PickableParts','all','FaceColor','none') set(l,'ButtonDownFcn',@(~,~)disp('line'),... 'HitTest','off') end
Щелкните левой кнопкой мыши строку:
Строка становится текущим объектом, но не может выполнить его ButtonDownFcn обратный вызов, потому что HitTest свойство - off.
Линия передает удар ближайшему предку (родительским осям), но оси не могут выполнить его ButtonDownFcn обратный вызов, так что оси передают удар на фигуру.
Рисунок может выполнять обратный вызов, поэтому MATLAB отображается figure в окне команд.
Участок FaceColor является none. Однако патч PickableParts является allЧтобы выбрать фрагмент, щелкните пустую грань и кромку.
Участок HitTest свойство - on таким образом, исправление может стать текущим объектом. Когда патч становится текущим объектом, он выполняет обратный вызов кнопки «вниз».