我创建了一个类,它可以为构造中的图形添加功能。该类为WindowMouseMotion
事件创建一个侦听器;但是,要使此事件触发,我必须为图形的WindowButtonMotionFcn
属性添加一个虚拟回调函数。我首先检查是否已填充此属性。如果不是,那么我将其设置为无效的虚拟回调函数。
我可以简单地将这个虚拟回调添加到任何现有的回调中,而不是检查属性是否已设置?回调属性是否可以调用多个函数?
修改
使用handle.listener
方法处理下面给出的WindowButtonMotionEvent
事件时,请务必使用eventdata.CurrentPoint
来访问当前鼠标位置。在以这种方式处理CurrentPoint
事件之前,图的WindowButtonMotionEvent
属性不会更新。
答案 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将回调设置为匿名函数以评估每个处理程序。