Существует два свойства, которые определяют, если и как объекты отвечают на клики мыши:
PickableParts
— Определяет, захватывает ли объект клики мыши
HitTest
— Определяет, может ли объект ответить на клик мыши, это получает или передает нажатие кнопки своему самому близкому предку.
Объекты передают нажатие кнопки через иерархию объектов до достижения объекта, который может ответить.
Когда объект получает и отвечает на клик мыши, объект:
Выполняется его кнопка вниз функционируют в ответ на мышь, щелкают левой кнопкой — Если объект задает коллбэк для ButtonDownFcn
свойство, MATLAB® выполняет этот коллбэк.
Контекстное меню отображений в ответ на мышь щелкает правой кнопкой — Если объект задал контекстное меню с помощью ContextMenu
свойство, 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
таким образом, закрашенная фигура может стать текущим объектом. Когда закрашенная фигура становится текущим объектом, она выполняет свою кнопку вниз коллбэк.