資源描述:
《獨立的回調函數76997》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、獨立的回調函數76997讀書如飯,善吃飯者長精神,不善吃者生疾病?!聦W誠獨立的回調函數 建立GUI函數的一個有效方法是編寫獨立的回調函數,專門執(zhí)行一個或多個回調。函數使用的對象句柄和其它變量可以作為參量傳遞,必要時回調函數可返回值?! 】紤]先前的一個例子,建立一個方位角的滑標,以腳本文件來實現。%setview.mscriptfilevw=get(gca,'View');Hc_az=uicontrol(gcf,'Style','slider',...'Position',[10514020],...'Min',-90,'Max',90,'Value',vw(1),...'Call
2、back',[...'set(Hc_cur,'String',num2str(get(Hc_az,'Value'))),'...'set(gca,'View',[get(Hc_az,'Value')vw(2)])']);Hc_min=uicontrol(gcf,'style','text',...'Position',[10254020],...'String',num2str(get(Hc_az,'Min')));Hc_max=uicontrol(gcf,'Style','text',...'Position',[110254020],...'String',num2str(get(
3、Hc_az,'Max')));Hc_cur=uicontrol(gcf,'Style','text',...'Position',[60254020],...'String',num2str(get(Hc_az,'Value')));下面是同樣的例子。作為一個函數,采用'Tag'屬性來辨別控制框,并使用獨立的M文件來執(zhí)行回調。funtionsetview()vw=get(gca,'View');Hc_az=uicontrol(gcf,'Style','Slider',...'Position',[10514020],...'Min',-90,'Max',90,'Value',vw(1)
4、,...'Tag','Azslider',...'Callback','svcback');Hc_min=uicontrol(gcf,'style','text,...'Position',[10254020],...'String',num2str(get(Hc_az,'Min')));Hc_max=uicontrol(gcf,'Style','text',...'Position',[110254020],...'String',num2str(get(Hc_az,'Max')));Hc_cur=uicontrol(gcf,'Style','text',...'Position',
5、[60254020],...'Tag','Azcur',...'String',num2str(get(Hc_az,'Value')));回調函數本身如下:functionsvcback()vw=get(gca,'View');Hc_az=findobj(gcf,'Tag','AZslider');Hc_cur=findobj(gcf,'Tag','AZcur');str=num2str(get(Hc_az,'Value'));newview=[get(Hc_az,'Value')vw(2)];set(Hc_cur,'String',str)set(gca,'View',newview
6、)上面的例子并不節(jié)省很多代碼,但卻得到了用函數而不用腳本文件的優(yōu)點:回調函數可以利用臨時變量,而不使命令窗口工作空間擁擠;不需要eval所需的引號和字符串;在回調函數中命令的句法變得十分簡單。使用獨立回調函數技術,越復雜的回調(函數)越簡單。 獨立回調函數的缺點是:需要很大數目的M文件以實現一個含有若干控制框和菜單項的GUI函數,所有這些M文件必須在MATLAB路徑中可得,且每一個文件又必須要有一個不同的文件名。在對文件名大小有限制且對大小寫不敏感的平臺上,如MS-windows,文件沖突的機會就增加了。而且回調函數只能被GUI函數調用而不能被用戶調用。遞歸函數調用 利用單獨的
7、M文件并遞歸地調用該文件,既可以避免多個M文件的復雜性,又可以利用函數的優(yōu)點。使用開關switches或ifelseif語句,可將回調函數裝入調用函數內。通常這樣一種函數調用的結構為functionguifunc(switch)。其中switch確定執(zhí)行哪一個函數開關的參量,它可以是字符串'startup','close','sectolor'等等,也可以是代碼或數字。如switch是字符串,則可如下面所示的M文件片段那樣將開關編程。ifnar