можно ли вручную установить WindowButtonDownFcn
и выборочно перезаписать правый или средний щелчок, сохраняя поведение по умолчанию?Конечная цель - скопировать фигуру в буфер обмена одним кликом.
set(gcf,'WindowButtonDownFcn',@(src,~) disp(src.SelectionType)); %this seemingly always overwrites default behavior of figure click
Я пытался сделать это со следующими сообщениями об ошибках (прокрутка вправо)
listener(gcf,'WindowButtonDownFcn',@(src,~) disp(src.SelectionType)) %Event 'WindowButtonDownFcn' is not defined for class 'matlab.ui.Figure'.
listener(get(gcf,'parent'),'WindowButtonDownFcn',@(src,~) disp(src.SelectionType)) %Event 'WindowButtonDownFcn' is not defined for class 'matlab.ui.Root'
handle(gcf).addlistener(handle(gcf),'WindowButtonDownFcn',@(src,~) disp(src.SelectionType)) %Unrecognized method, property, or field 'addlistener' for class 'matlab.ui.Figure'.
и еще несколько перестановок с использованием handle
и event.listener
без успеха
Протестировано в Matlab 2019a.
РЕДАКТИРОВАТЬ: вот шаблонная функция для использования с модификаторами, основанными на добром ответе matlabgui
%copies figure to clipboard when [control]+[right-click] anywhere on figure window (and leaving default functionality intact)
figure; plot(randi(100,1,100)) %random figure
addlistener ( gcf, 'WindowMousePress', @(src,~) myFavFunc(src,[]))
function myFavFunc(src,~)
if strcmp(src.SelectionType,'alt') && numel(src.CurrentModifier)==1 && strcmp(src.CurrentModifier,'control')
print -clipboard -dmeta
disp('copied figure to clipboard')
end
end