概述
所有图形对象的回调函数
回调函数 | 意义 |
---|---|
ButtonDownFcn | 在对象上单击鼠标左键执行的回调函数 |
CreateFcn | 对象创建时执行的回调函数 |
DeleteFcn | 对象删除时执行的回调函数 |
图形窗口的回调函数
回调函数 | 意义 |
---|---|
CloseRequestFcn | 图形窗口接收到关闭请求时执行的回调函数,如果修改其值将不能通过点击关闭关掉图形窗口 |
KeyPressFcn | 光标处于图形窗口内,且用户按下某个按键时执行的回调函数 |
ResizeFcn | 用户调整图形窗口大小时执行的回调函数 |
WindowButtonDownFcn | 用户在图形窗口背景区,不可用空间或坐标轴背景区单击鼠标时执行的回调函数 |
WindowButtonMotionFcn | 用户在图形窗口内拖动鼠标时执行的回调函数 |
WindowsButtonUpFcn | 用户在图形窗内单击鼠标后再次释放鼠标按钮执行的回调函数 |
中断回调规则
根据指针在图形中的区域的不同,MATLAB决定哪一个回调将被激励。如果指针实在句柄对象内,如同Position属性所确定的那样,那么指针就是在对象上;如果指针不在一个对象上,而在对象选择的区域内,则指针靠近对象;如果指针在图形内但是既不靠近也不再另一个对象上,则可以认为指针关掉其它对象;如果对若干对象及选择区域相重叠,重叠顺序就决定了选择顺序。
uimenu对象没有外部的选择区域,指针要么在uimenu上,要么不在其上。uicontrol对象越过图基位置,在各个方向延伸大概5个像素有一个选择区域,指针可以靠近或者在控制框上。
一旦回调开始执行,通常都在下一个回调事件处理之前运行完毕。将Interruptble属性设置为yes可以改变这种默认行为,从而当正在执行的回调遇到drawnow,figure,getframe或pause命令时,允许处理的回调时间悬挂起来。事件队列执行计算操作或设置对象属性的命令一经发出,MATLAB便经行处理,而设计图形窗口输入或输出的命令则生成时间。事件包括产生回调的指针移动和鼠标按钮动作,以及重新新绘制图形的命令。
1. 回调处理
回调遇到drawnow,getframe,pause或figure命令之前一直执行,不含有这些特殊命令的回调不会被中断,一旦遇到这些命令之一,就停止执行回调,将其悬挂起来,并检查事件队列中每个悬挂的时间。如果产生悬挂回调对象的Interruptible属性设置为yes,则在被悬挂的回调恢复之前按序处理所有悬挂;如果Interruptible属性设置为no,即只处理悬挂的重画事件,放弃回调事件。
2.防止中断
即使在执行回调是不能被中断的,当它遇到drawnow,figure,getframe或pause命令时,仍然处理悬挂的重画事件。可以通过避免在回调中使用所有这些特殊命令,消除此类事件。如果回调中需要这些特殊命令,但又不要任何悬挂事件甚至刷新时间来中断回调,则可以使用drawnow。
3.drawback
drawnow命令迫使MATLAB更新屏幕,只要MATLAB回到命令提示,或执行drawnow,figure,getframe或pause命令,屏幕就更新。在回调中将drawnow包含在一个特殊命令之前,就具有清除事件队列的效果,防止刷新时间以及回调时间终端会掉。
另外如果对象的BusyAction属性被摄值为cancel,则中断回调执行的事件被忽略;如果BusyAction属性被摄值为queue,那么中断回调执行的事件将被保留在事件队列中,直到被终端的回调执行完毕后响应该事件为止。
利用单独的M文件递归地调用该文件,既可以避免多个M文件的复杂性,又可以利用函数的优点。使用switch case或if elsif语句,可将回调函数装入调用函数内。通常这种函数调用的结构为Function guifun(switch)
其中switch确定执行那个函数开关的参量,他可以使字符串,也可以是代码或数字。
这里写代码片
最后
以上就是笨笨画笔为你收集整理的回调函数的全部内容,希望文章能够帮你解决回调函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复