一、從最簡單的開始 編程最基本的目的就是——我執行一個操做,程序作出一個反應。 「一個操做」包括:點擊鼠標,拖動滑塊,填寫數據,選擇選項…… 「作出一個反應」包括:計算一些東西,而後儲存在哪裏,或者貼個圖出來,或者顯示在哪裏…… ------------------------------------------------------------------------------------------------------------------- 編程的基本思想: 目的->當點擊按鈕A時, 而後執行任務C, 則->進入按鈕A的回調函數callback裏,寫下任務C的代碼。 ------------------------------------------------------------------------------------------------------------------- a:不知道callback在哪??右鍵單擊按鈕,view callbacks->選擇callback)別的控件也同樣。 a:不一樣的回調函數啥意思?? callBack 最經常使用的就是它。若是控件是按鈕,那點擊按鈕時,則按鈕下的Callback就會執行;若是是滑塊,則拖動滑塊時,滑塊名下的callback就會執行;總之,就是對控件默認操做時,matlab後臺就會自動調用它名下的的callback。正經常使用途,全放在callback下就夠了。若是其餘的,實在是想知道,瞭解一下也何嘗不可。 ButtonDownFcn 就是鼠標在它(代指各類控件)上面點擊一下,你放在這個函數名下的代碼就會執行。(ps:按鈕的callback也是點擊,因此會覆蓋掉這個buttondownfcn。) CreateFcn 顧名思義,在生成這個控件,顯示以前,執行你放在這個函數名下的代碼; DeleteFcn 同樣。在控件要銷燬,可是被毀滅以前執行這個函數名下的代碼。貌似「真的要退出嗎」這一類就是寫在這裏。 KeyPressFcn 當前控件得到焦點且有按鍵按下時執行。(什麼是焦點?就是這個控件被鼠標點了(或者是tab輪選到了)。你打開一個記事本,而後再點這個網頁,再隨便按幾個按鍵,記事本上有字不?沒有對吧。由於它沒得到焦點,因此你的按鍵它不會反應的。只有你最後再點它一下,再按幾個按鍵,結果怎麼樣?有字了吧?)這裏的KeyPressFcn也是同樣的道理。 通常在這下面的代碼還會判斷下按鍵是什麼,而後執行相應的代碼。 ResizeFcn,SelectionChangeFcn 不經常使用。也懶得去看了。附幾句,控件都有Resize的屬性,好像默認是不可調整,若是要用到這個函數,去把它打開先。 SelectionChangeFcn 是在羣按鈕 組件中,改變選擇時,所執行的函數。
哪些控件支持哪些回調函數?很簡單,你在它上面右鍵就能夠看到了,點進去就能夠編輯了。 能夠在property inspect中在須要的回調函數下設置%automatic就能夠自動添加相應的回調函數框架。
二、經常使用控件代碼框架參考 --------------------------------------------------------------------- Toggle Button 的callback通常寫法 toggle button是什麼?設計面板上,左邊那一欄圖標,看到它名字了吧?沒看到?File->preference->GUIDE->把那個show names那一欄勾選上。好了,能夠看到了吧 。知道是什麼了吧? 拖進來,雙擊它,看到它的屬性設置表。上面各類各樣的屬性,之後有時間慢慢研究。 點下它時,它默認value ='Max' 不點下它時,它value='Min' --------
- functon togglebutton1_callback(hObject,eventdata,handles)
- %這一句,如今不用管。自動加的。
- %%%如下是通常代碼
- button_state = get(hObject,'Value')
- %控件甲的callback下面hObject就是控件甲,同理控件乙callback下的hObject......
- if button_state==get(hObject,'Max')
- %則怎麼怎麼怎麼
- else if button_state==get(hObject,'Min')
- %則怎麼怎麼怎麼
- end
複製代碼
-------- 備註:button_state隨便取的變量名,存放按鈕的選擇狀態,別覺得它是什麼喔。 若是你的button甲是放在一個buttonGroup裏面,則button甲callback下的代碼就要挪到buttonGroup下面去。由於buttonGroup的回調函數會覆蓋掉它成員的回調函數。 ---------------------------------------- Radio Buttons ------
- 右鍵點選你的Radio按鈕,進入編輯callback
- function ………………略
- if(get(hObject,'Value')==get(hObject,'Max'))
- %被選中了,你想怎麼樣
- else
- %不被選中,你想怎麼樣
- end
複製代碼
----------------------------------------- Check Boxes -------
- if(get(hObject,'Value')==get(hObject,'Max'))
- %被選中了,你想怎麼樣
- else
- %不被選中,你想怎麼樣
- end
複製代碼
------------------------------------------ Edit Text -----------
- function edit1_Callback(hObject,eventdata,handles)
- user_string = get(hObject,'String'); %就獲得了所輸入的字符
- %由於matlab是把全部的輸入看成字符來看待,若是你是指望的到輸入的數據的話,則:
- user_entry= str2double(get(hObject,'String')); 這裏進行一個數據類型轉換。看函數名就知道了。
- if isnan(user_entry) %nan就是not a number的簡寫。知道這個函數意思了吧?
- errodlg('You must entry a number value','Bad Input','modal') %跳出一個對話框。
- end
- %正確獲得了數值,如下輸入你的其餘代碼
複製代碼
---------- 附: 'Bad Input'是指窗口樣式,就像咱們在操做系統下,常常會跳出一個黃色感嘆號的對話框,或者一個紅叉的對話框; modal是指窗口類型,就像一些程序跳出警告對話框,咱們什麼也不能作了,只能把那個對話框選擇一個是或者不是,才能繼續作其餘事情。這種對話框就是modal類型。而一般的好比瀏覽器的界面,咱們打開後,能夠無論,而後打開別的對話框,這種就是非模態對話框。 默認在點擊你的界面菜單欄或者界面上的其餘組件後,這個edit text的callback都回被執行一遍,因此在你點肯定按鈕的時候,edit callback下讀到的數據會更新的了,不用擔憂! --------------------------------------------------- Sliders ---------
- function slider1_callback(hObject,eventdata,handles)
- slide_value=get(hObject,'Value');%獲取滑塊當前值
- %別的代碼
複製代碼
---------- 附: 它的Max Min 屬性設置了滑竿的最大最小範圍值。 --------------------------------------------------- List Boxes -----------
- function ........
- index = get(handles.listbox1,'Value'); %listbox1是你本身的那個控件的tag名字
- file_list =get(handles.listbox1,'String'); %獲得了你的listBoxes的列表
- file_name = file_list{index};
- %獲得了所選擇的項目名,一下寫本身的代碼
複製代碼
------------------- 附: 此 callback在鼠標在這個控件上鬆開或者特定的鍵盤按鍵鬆開(看你怎麼設置它的別的屬性的了)時候執行。 默認鍵盤上 下 鍵能夠改變它的值同時執行一次callback。而enter和space不改變它的值,只是執行callback Max-Min 差值是0的話,表示只能夠單選;1的話,表示能夠多選。這個能夠在他的屬性欄裏設置 ---------------------------------------------------------- Pop_up Menus --------------
- function .......
- val=get(hObject,'Value')
- Switch val
- case 1
- %
- case 2
- %
- defualt
- ......
- end
複製代碼
---------------------------------------------------- Button Groups ------------------
- function .......
- switch get(hObject,'Tag');
- %注意這裏的hObject和別的不一樣,並非指這個BUtton Group,而是指在組裏面,被選中的那個控件
- case 'radio button1' %按鈕1的tag
- %。。。。。
- case '按鈕2的tag'
- %。。。。。
- 。。。
- end
複製代碼
---------- 附:因此在這裏,若是要拿到button groups自己的話,就用handles.它的tag名 中間一個點。 -------------------------------------------------- Axes ------------- 它是用來畫圖的,能夠說是一塊畫布。它並不算是嚴格意義上的控件,但可讓用戶在它的區域上點擊或者移動鼠標時(看你是放在什麼callback下了)執行必定的代碼。那就要加它本身的callback函數了。 下面用來通常功能,因此不用本身的callback,代碼都是寫在別的控件回調函數下。
- axes(handles.youraxesname);%選擇你的一個axes,天然,用它的tag來選中它
- plot(x,y); %這時,所畫的圖就到它上面了
- set(handles.youraxesname,'XMimrFrick','on'); %順便設置一下它的屬性
- grid on; %加上網格
複製代碼
-------------------------------------------------- Active控件
還沒時間去研究。這個是最好用的,由於能夠借用別人的現成的東西,畢竟本身不是程序員,沒有必要編寫太多的代碼。一些通用的好比文件存取對話框,視頻放映之類的。 惋惜,我還沒時間去看。呵呵。
------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------- ps:真是幸虧有恢復數據功能,多是我打太長時間,點發新話題竟然要重登錄,再後退已經沒有內容了,差點崩潰。 o(∩_∩)o...
[ 本帖最後由 柚籽 於 2008-5-15 02:53 編輯 ] |