我可以手动设置WindowButtonDownFcn
并选择性地覆盖正确或中键,同时保留默认行为?最终目标是单击时将图形复制到剪贴板。
set(gcf,'WindowButtonDownFcn',@(src,~) disp(src.SelectionType)); %this seemingly always overwrites default behavior of figure click
我尝试了以下错误msgs(右滚动(
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
我不知道为什么Matlab隐藏了一些人物事件,您可以在此处获取列表:
hFig = figure;
mc = metaclass(hFig);
disp ( {mc.EventList.Name}' ) ;
从该信息中,您可以将侦听器添加到鼠标按下事件:
hFig = figure;
addlistener ( hFig, 'WindowMousePress', @(src,~)disp('myCallback' ))
将留下标准图的回调,而不是disp命令使其运行一个函数,您可以在其中查看图形属性SelectionType
以确定按下哪个鼠标按钮。您可以将其扩展到使用CurrentModifier
属性来确定Ctrl
,Shift
或Alt
是否被按下以进一步自定义。