12/31/2006

跳出式選單之程式

(編譯及圖示摘自mathworks.com)
上一節所完成之程式執行後,你會發覺並不能有結果,因為按下的鍵並沒有動靜。不過不要灰心,因為仍然有些情節必須處理。現在談到跳出式選單之程式撰寫,這也是一個有趣的項目。跳出式選單屬於下拉式,但可置於畫面上之任一位置,本例中係利用它提供不同的繪圖資料,當選擇三者之一時,其對應屬性值應分別設定於其字串中,如此才能搭上線。當代表跳出式選單之其屬性值取得後,即可立即顯示之內容,此內容通常會存在handles.current_data這個參數內。

同上節,我們仍然要回到編輯視窗中,在function之標示下可以找到popupmenu1_Callback這個選項。也可以直接到畫面編輯窗中,用滑鼠直接點選跳出式選單之元件,再按右鍵選擇Callback(方式如下圖),然後回到 M-檔案之編輯窗來。



此時對應於本例之 GUI M-檔案內容會出現,而游標會指向跳出式選單之回叫程式,其內容如下:



% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

在此段程式下面可以增加與 popupmenu1_Callback相關 之程式內容,其細節如下所示。在此段附加之程式之功能是先自屬性表中取得與此跳出式選單與有關之兩項參數,分別為:
* String:屬細胞陣列,內有此選單之內容。
* Value :選單指標,向選定之資料集中之選單內容。

添加之程式部份,使用 switch函數設定所選定之資料集,並將其置於立即顯現之組合參數內,以便立即顯示。最後一項則將選定之 handles 結構陣列置於guidata參數中,以便傳遞。


% Determine the selected data set.
str = get(hObject, 'String');
val = get(hObject,'Value');
% Set current data to the selected data set.
switch str{val};
case 'Peaks' % User selects peaks.
handles.current_data = handles.peaks;
case 'Membrane' % User selects membrane.
handles.current_data = handles.membrane;
case 'Sinc' % User selects sinc.
handles.current_data = handles.sinc;
end
% Save the handles structure.
guidata(hObject,handles)