马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
最近在看回调编程,算是自己的读书笔记吧。拿来分享一下,如果已经有人发过相同的帖子。就请版主把删了吧
1 回调编程小节
函数回调编程的难点在于获取数据,也就是数据的传递。下面对几种常见的数据传递方式做下总结:
(1)将数据变量声明成persistent类型。
(2)使用GUI图形的应用属性保存数据:setappdata(Hf,'MyGuiFcnData',mydata)%保存在图像句柄Hf的标签属 性MyGuiFcnData中;读取时:
Hf=findobj('Tag','MyGuiFcnData');%查找图形句柄
mydata=getappdata(Hf,'MyGuiFcnData')%读取数据
(3)使用guidata将数据保存在GUI图形的ApplicationData属性中
guidata(Hf,mydata);%保存
mydata=guidata(gcbo);%读取
gcbo函数返回调用回调的对象的句柄。该种方式在后台用的仍然是(2)中的函数来实现,不过更简洁。
(4)使用附加变量参数
我自己认为是最简便的一种方式
举个简单的例子:
function myguifcn
%MYGUIGCN Sample GUI Function Using Function Callback
%code that creates the GUI and sets the callback
h0=figure('toolbar','none','position',[200 150 350 300],...
'name','演示窗口','NumberTitle','off',...
'menubar','none');
h1=axes('parent',h0,...
'position',[0.15 0.2 0.75 0.75],...
'visible','on');
data=peaks(20);
meshc(data);
p1=uicontrol('Parent',h0,'Style',...
'PushButton','String',...
'mesh','Callback',{@meshfcn,data},...
'position',[50 20 50 20]);
p2=uicontrol('Parent',h0,'Style',...
'PushButton','String',...
'surf','Callback',{@surffcn,data},...
'position',[150 20 50 20]);
p3=uicontrol('Parent',h0,'Style',...
'PushButton','String',...
'contour','Callback',{@contourfcn,data},...
'position',[250 20 50 20]);
%-------------------------------------------------
function meshfcn(cbo,eventdata,data)
mesh(data);
%-------------------------------------------------
function surffcn(cbo,eventdata,data)
surf(data);
%-------------------------------------------------
function contourfcn(cbo,eventdata,data)
contour(data);
回调使用函数句柄,数据由回调函数附加参量来传递。这个例子只是为了说明函数句柄用于回调和附加参量传递数据的办法,对于简单的情形可以直接在把语句写到callback里。这个例子也简写为:
function myguifcn
%MYGUIGCN Sample GUI Function Using Function Callback
%code that creates the GUI and sets the callback
h0=figure('toolbar','none','position',[200 150 350 300],...
'name','演示窗口','NumberTitle','off',...
'menubar','none');
h1=axes('parent',h0,...
'position',[0.15 0.2 0.75 0.75],...
'visible','on');
data=peaks(20);
meshc(data);
p1=uicontrol('Parent',h0,'Style',...
'PushButton','String',...
'mesh','Callback','mesh(data)',...
'position',[50 20 50 20]);
p2=uicontrol('Parent',h0,'Style',...
'PushButton','String',...
'surf','Callback','surf(data)',...
'position',[150 20 50 20]);
p3=uicontrol('Parent',h0,'Style',...
'PushButton','String',...
'contour','Callback','contour(data)',...
'position',[250 20 50 20]); |