设置Matlab WindowButtonDownFcn并保留默认行为
我可以手动设置设置Matlab WindowButtonDownFcn并保留默认行为,matlab,matlab-figure,undocumented-behavior,Matlab,Matlab Figure,Undocumented Behavior,我可以手动设置WindowButtonDownFcn并有选择地覆盖右键或中键单击,同时保留默认行为吗?最终的目标是通过点击将图形复制到剪贴板上 set(gcf,'WindowButtonDownFcn',@(src,~) disp(src.SelectionType)); %this seemingly always overwrites default behavior of figure click 我尝试了以下错误msgs(向右滚动) 使用handle和event.listener进行更
WindowButtonDownFcn
并有选择地覆盖右键或中键单击,同时保留默认行为吗?最终的目标是通过点击将图形复制到剪贴板上
set(gcf,'WindowButtonDownFcn',@(src,~) disp(src.SelectionType)); %this seemingly always overwrites default behavior of figure click
我尝试了以下错误msgs(向右滚动)
使用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
来进一步自定义它。我还尝试了使用listener()函数,但是,如果我没有弄错,我主要不知道什么是非常有趣的方法!应该注意的是,为“WindowButtonDownFcn”设置的任何回调也似乎同时起作用,因此设置要做的任何事情(即缩放、旋转)都会发生,对于给定的鼠标操作,监听器中所做的任何事情都会发生。的确,这非常棒,我使用SelectionType
和CurrentModifier
修改了函数的代码。后续问题:如何查询WindowMousePress
中存储的当前图形的内容?只需查看属性即可。我没有领会你的意思吗?
hFig = figure;
addlistener ( hFig, 'WindowMousePress', @(src,~)disp('myCallback' ))