12/31/2006

函數的再認識

輸出函數


輸出函數是將執行後之狀態輸出至指令行。也可以利用這項功能將一變數值再傳遞給另一個gui指令。

經過guide自動產生之輸出函數很簡單,只有這樣一行:

function varargout = my_gui_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;


因此,若gui本身未被遮斷,其輸出內容應為gui之握把,其內容置於handles.output內。若要獲得不同於上述輸出項時,則可以利用下列方式取得:

  • 在啟動函數中增加uiwait指令,令M檔案執行時能暫停,直到使用者啟動gui中之元件,例如按鈕。
  • 在gui中之期待回應之每一元件中,令其回叫函數更新handles.output之值,並執行uiresume之指令。
例如:若gui中之按鈕元件之string值為'Yes',則可在其回叫函數中增加下列指令:


handles.output = 'Yes';
guidata(hObject, handles);
uiresume;


此時,當gui程式被呼叫時,其執行型式如下:

>>OUT = my_gui


輸出參數varargout也是細胞矩陣,因此可以包括任何型式及數目的輸出項。guide之輸出預設備為handles.output。若要產生第二種輸出型式,則可作如下之添加:

varargout{2} = handles.second_output;

上述值之設定可以在任何回叫函數中為之,然後用guidata指令儲存。上述名稱並非一成不變,你可以選擇自己喜歡的參數名稱。

回叫函數


回叫函數在gui中是最重要的一環,因為元件之作動與呼叫程式藉此相互連繫。其函數名稱之設定係以元件之標籤為參數,例如一按鈕之Tag等於print_button時,其回叫函數之型式為:


function print_button_Callback(hObject, eventdata, handles)


輸出入參數


  • 呼叫gui之檔名有幾種方式,其功用自有不同,有時可以利用,設程式名稱為demo_gui:
  • 直接呼叫demo_gui:沒有引數,直接打開demo_gui程式。
  • 呼叫h=demo_gui:打開demo_gui,得其握把h。
  • 呼叫demo_gui('Property',Value,...):指令中為圖屬性,打開demo_gui使用輸入之屬性對,屬性對可以使用一對以上。
  • 呼叫demo_gui('demo_function',hObject, evendata, handles,...):呼叫次函數demo_function。
  • 呼叫demo_gui('Velocity',300):打開demo_gui,但傳遞['Velocity',300]引數向量至啟動函數。