是否可以在WindowButtonMotionFcn中使用多个回调



我创建了一个类,它为构造图添加了功能。这个类为WindowMouseMotion事件创建一个监听器;然而,为了激发这个事件,我不得不为图的WindowButtonMotionFcn属性添加一个伪回调函数。我首先检查此属性是否已填充。如果不是,那么我将其设置为一个不起任何作用的伪回调函数。

我可以简单地将这个伪回调添加到任何现有的回调中吗?回调属性是否可以调用多个函数?

编辑

使用handle.listener方法处理下面给出的WindowButtonMotionEvent事件时,请确保使用eventdata.CurrentPoint访问当前鼠标位置。在以这种方式处理WindowButtonMotionEvent事件之前,不会更新图的CurrentPoint属性。

一篇相关文章可以在Yair Altman的未文档MATLAB博客上找到,来自客座博主Matt Whitaker。你所指的是回调链接,并引用博客:

坦率地说,已经编写了代码以前处理回调的链,我宁愿戳自己用叉子戳眼睛!

幸运的是,这篇文章中似乎有另一种解决方案。使用发布在那里的代码片段,我能够获得一个在鼠标移动时执行的函数,而不必设置'WindowButtonMotionFcn'。我在当前的数字中添加了一个监听器,如下所示:

myListener = handle.listener(gcf,'WindowButtonMotionEvent',...
                             @(hSource,eventData) disp('hello'));

当我在窗口中移动鼠标时,显示了消息hello

你可以通过cellfun和feval来实现这一点,正如Mathworks网站上的回答:http://www.mathworks.com/matlabcentral/answers/10664-multiple-callback-functions

obj = uicontrol(...,'style','popupmenu',...
  'Callback', @(h,e)(cellfun(@(x)feval(x,h,e), ...
   {@(h,e)this.myfunc(h), ...
   @(h,e)this.myfunc2(h), ...
   @(h,e)this.myfunc2(h)}))

请注意,回调被设置为一个匿名函数,使用cellfun来评估每个处理程序。

相关内容

  • 没有找到相关文章

最新更新