Захват кликов мыши

Свойства, которые управляют ответом на клики мыши

Существует два свойства, которые определяют, отвечают ли объекты на клики мыши и как:

  • PickableParts - Определяет, захватывает ли объект клики мыши

  • HitTest - Определяет, может ли объект ответить на захваченный клик мыши или передать нажатие кнопки ближайшему предку.

Объекты передают нажатие кнопки через иерархию объектов до достижения объекта, который может ответить.

Программирование ответа на клик мыши

Когда объект захватывает и реагирует на клик мыши, объект:

  • Выполняет функцию опускания кнопки в ответ на щелчок левой кнопкой мыши - если объект задает коллбэк для ButtonDownFcn свойство, MATLAB® выполняет этот коллбэк.

  • Отображает контекстное меню в ответ на щелчок правой кнопкой мыши - если объект определил контекстное меню используя ContextMenu свойство, MATLAB вызывает это контекстное меню.

Примечание

Фигуры не имеют PickableParts свойство. Фигуры выполняют функции обратного вызова кнопки независимо от настройки их HitTest свойство.

Примечание

Если оси PickableParts для свойства задано значение 'none'Дети осей не могут захватывать клики мыши. При этом все клики мыши захватываются рисунком.

Комбинации значений PickablePart/HitTest

Используйте PickableParts и HitTest свойства для реализации следующего поведения:

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

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

  • Объект, выбранный кликом мыши, не захватывает клик мыши. Клик мыши может быть захвачен объектами, расположенными позади объекта, выбранного кликом мыши.

В этой таблице суммируется реакция на клик мыши на основе значений свойств.

Пикетируемые детали осейPickablePartsHitTestРезультат клика мыши

видимый/все

видимый (по умолчанию)

on (по умолчанию)

Нажатие по видимым частям объекта выполняет коллбэк кнопки вниз или вызывает контекстное меню

видимый/все

все

на

Щелчок по любой части объекта, даже если он не отображается, делает объект текущим и выполняет коллбэк вниз кнопки или вызывает контекстное меню

видимый/all/none

ничего

вкл ./выкл.

Щелчок по объекту никогда не делает его текущим объектом и никогда не может выполнить коллбэк кнопки или активировать контекстное меню

ничего

видимый/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

Нажмите кнопку Line

Щелкните левой кнопкой мыши по линии:

  • Линия становится текущим объектом, но не может выполнить свою ButtonDownFcn коллбэк, потому что его HitTest свойство off.

  • Линия передает удар ближайшему предку (родительским осям), но оси не могут выполнить его ButtonDownFcn коллбэк, поэтому оси передают удар на рисунок.

  • Рисунок может выполнить свой коллбэк, поэтому MATLAB отображает figure в Командном окне.

Щелкните закрашенная фигура

Область закрашенной фигуры FaceColor является none. Однако закрашенная фигура PickableParts является all, так что можно выбрать закрашенную фигуру, щелкнув пустую грань и ребро.

Область закрашенной фигуры HitTest свойство on таким образом, закрашенная фигура может стать текущим объектом. Когда закрашенная фигура становится текущим объектом, он выполняет обратный коллбэк вниз своей кнопки.

Для просмотра документации необходимо авторизоваться на сайте