Существует два свойства, которые определяют, если и как объекты отвечают на клики мыши:
PickableParts
Определяет, захватывает ли объект клики мыши
HitTest
Определяет, может ли объект ответить на клик мыши, это получает или передает нажатие кнопки своему самому близкому предку.
Объекты передают нажатие кнопки через иерархию объектов до достижения объекта, который может ответить.
Когда объект получает и отвечает на клик мыши, объект:
Выполняется его кнопка вниз функционируют в ответ на мышь, щелкают левой кнопкой — Если объект задает коллбэк для свойства ButtonDownFcn
, MATLAB® выполняет этот коллбэк.
Контекстное меню отображений в ответ на мышь щелкает правой кнопкой — Если объект задал контекстное меню с помощью свойства UIContextMenu
, MATLAB вызывает это контекстное меню.
Фигуры не имеют свойства PickableParts
. Фигуры выполняют функции обратного вызова кнопки независимо от установки их свойства HitTest
.
Если свойство PickableParts
осей установлено в 'none'
, дочерние элементы осей не могут захватить клики мыши. В этом случае все клики мыши получены фигурой.
Используйте свойства PickableParts
и HitTest
реализовать следующие поведения:
Объект, по которому кликают, захватывает мышь нажатие кнопки и отвечает кнопкой вниз коллбэк или контекстное меню.
Объект, по которому кликают, захватывает мышь нажатие кнопки и передает клик мыши одному из его предков, которые могут ответить кнопкой вниз коллбэк или контекстное меню.
Объект, по которому кликают, не захватывает мышь нажатие кнопки. Клик мыши может быть получен объектами позади объекта, по которому кликают.
Эта таблица суммирует ответ на клик мыши на основе значений свойств.
Оси PickableParts | PickableParts | HitTest | Результат клика мыши |
---|---|---|---|
видимый/весь | видимый (значение по умолчанию) | на (значении по умолчанию) | Нажатие на видимые части объекта выполняет кнопку вниз коллбэк или вызывает контекстное меню |
видимый/весь | все | на | Нажатие на какую-либо часть объекта, даже если не видимый, делает объектный ток и выполняет кнопку вниз коллбэк или вызывает контекстное меню |
visible/all/none | 'none' | вкл\выкл | Нажатие на объект никогда не делает его текущим объектом и никогда не может выполнять кнопку вниз коллбэк или вызывать контекстное меню |
'none' | visible/all/none | вкл\выкл | Нажатие на любые дочерние объекты осей никогда не выполняет кнопку вниз коллбэк или вызывает контекстное меню |
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
, таким образом, закрашенная фигура может стать текущим объектом. Когда закрашенная фигура становится текущим объектом, она выполняет свою кнопку вниз коллбэк.