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

时间:2011-05-24 21:14:37

标签: matlab user-interface callback event-handling

我创建了一个类,它可以为构造中的图形添加功能。该类为WindowMouseMotion事件创建一个侦听器;但是,要使此事件触发,我必须为图形的WindowButtonMotionFcn属性添加一个虚拟回调函数。我首先检查是否已填充此属性。如果不是,那么我将其设置为无效的虚拟回调函数。

我可以简单地将这个虚拟回调添加到任何现有的回调中,而不是检查属性是否已设置?回调属性是否可以调用多个函数?

修改

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

2 个答案:

答案 0 :(得分:3)

A related article可以在Yair Altman的未记载的MATLAB博客上找到,来自博客作者Matt Whitaker。你所暗示的是回调链接,并引用博客:

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

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

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

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

答案 1 :(得分:0)

您可以通过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将回调设置为匿名函数以评估每个处理程序。