Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置Matlab WindowButtonDownFcn并保留默认行为_Matlab_Matlab Figure_Undocumented Behavior - Fatal编程技术网

设置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' ))