1. 創(chuàng)建及初始化界面(Figure)
SystemFrameHandle=figure(1);%創(chuàng)建一個窗口
clf reset
set(gcf,'name','CSplatform NUPT','numbertitle','off',...
'unit','normalized','position',[0.02,0.1,0.92,0.82],...
'menubar','none');
說明:第一句是新創(chuàng)建一個窗口,并且記錄窗口的句柄。第二句話是清除和重置相關的窗口及圖形信息。第三句是設置gcf的屬性。屬性的格式是:先<屬性名>,后緊接著是屬性的<值>。其中gcf:Get handle to current figure.也即是獲得當前窗口的句柄。窗口的屬性很多,具體可以參看matlab幫助文檔。http://www.mathworks.cn/help/techdoc/ref/figure_props.html;jsessionid=b1a1b2c452f8eed5976059921483
2. 菜單(uimenu)
menu_file=uimenu(gcf,'Label','File(&F)');
menu_open_image=uimenu(menu_file,'Label','Open Images(&O)');
說明:上述語句創(chuàng)建了2個菜單項。其中,第二個菜單項是第一個菜單項的子項。因此,我們可以看出,菜單的創(chuàng)建有2中方法:
handle = uimenu('PropertyName',PropertyValue,...)
handle = uimenu(parent,'PropertyName',PropertyValue,...)
uimenu的屬性和uicontrol的屬性一樣,具體看第三節(jié)
3. 控件(uicontrol)
控件的創(chuàng)建有如下2中方法
handle =uicontrol('PropertyName',PropertyValue,...)
handle = uicontrol(parent,'PropertyName',PropertyValue)
具體是創(chuàng)建哪個類型的控件,控件的屬性等,都有<屬性>及其<值>決定。
部分屬性解析:
1 ‘BakcgroundColor'(背景顏色)---ColorSpec(特定的顏色).這個屬性聲明了用來填充uicontrol對象的背景顏色,ColorSpec是一個三元素的RGB 向量或者標準顏色的字符串號,默認的顏色值是和系統(tǒng)相關的,并且可以通過輸入命令 get(0,'DefaultUuicontrolBackgroundColor')獲得。該<值>的格式為[0.10.1 0.1];其中,三個值分別代表紅、綠、藍。值的范圍0~1
2 ‘Callback'(返回,回調(diào))----string(字符串)。這個屬性聲明了當用戶觸發(fā)uicontrol對象(如:在按下一個'pushbutton'或者拖動一個 'slider')時候所執(zhí)行的字符串(一般為函數(shù)名),'frame' 和靜態(tài)的'text'uicontrol類型不發(fā)出回調(diào)。更確切的說,callback就是設置控件的消息響應處理函數(shù)。
3 ‘CData'--m-by-n-by-3array( 矩陣)這個屬性是一個在'pushbutton'或'fogglebutton'uicontrol類型上顯示的真彩色圖像。
4 ‘Enable'---{‘on'} (默認狀態(tài))|‘inactive'(靜態(tài))|'off'(關)這個屬性聲明了是否啟用這個uicontrol對象,當設置為'on'的時候,在這個 uicontrol被選中的時候,執(zhí)行這個回調(diào)字符串,當設置為'off'的時候,這個uicontrol標簽字符串就變暗。當設置為 'inactive' 的時候,uicontrol沒有被變暗,當設置為'off'和'inactive'的時候,不執(zhí)行這個回調(diào)字符串,但是'ButtonDownFcn'屬性還是會起作用。
5 ‘Extent'(寬度,長度)---[0 0 width heigth],這個屬性是一個只讀屬性,它返回用來標識這個uicontrol所使用的文本字符串的大小,其格式為標準的直角坐標格式,單位為 'Units'屬性所聲明的單位,這個屬性可用于確定裝載所期望標簽字符串而需要的uicontrol的大小。
6 ‘FontAngle'(字體傾斜度)---{‘normal'}|'italic'(斜體的)|'oblique'(斜的,歪的)這個屬性聲明了所用的字符的傾斜度。
7 ‘FontName'(字體)---string這個屬性聲明了所使用的字體類型,使用'FixedWidth'就將字體設置為保存在根對象的'FixedWidthFontName'屬性中的字體。
8 ‘FontSize'(字體大小)---number(數(shù)字),聲明了字體的大小,單位為'FontUnits'屬性所聲明的單位。‘FontUnits— {‘points'(點)}|'normalized'|'inches'(英寸)|'centimeters'(厘米)|'pixels'(圖素)這個屬性聲明了字體相對于這個高度的大小使用的單位,設定為'normalize'是指uicontrol的高度為1.
9 ‘FontWeight(字體粗細)'---'light'|{‘normal'}|'demi'(半)|'boid'
10 ‘ForegroundColor'(前景色)---ColorSpec(色值)聲明了uicontrol的標簽文本的顏色,ColorSpec是一個三元素的RGB向量,或者是一個標準顏色的字符串名,默認值為黑色。
11‘HorizontalAlignment'(水平方向上的對齊方式)—{‘left'}(左)|'center'(中)|'right'(右)這個屬性聲明了uicontrol在水平方向上的對齊方式,在windowspc機上,這個屬性只影響到'edit'和'text'類型的uicontrol.
12 ‘ListboxTop'---scalar,對'listbox'類型的uicontrol,這個屬性聲明了顯示在列表最頂端的字符串的索引。
13 ‘Max'(最大)---scalar(比列),對于'radiobutton'和'checkbox'類型的uicontrol,'Max'是uicontrol為'on'時'Value' 屬性的值,對于'slider'類型的uicontrol,‘Max'是用戶能夠選擇的最大值,并且它必須比'Min'屬性所聲明的值要大,默認值為1,對于'edit' 類型的uicontrol,如果'Max'-‘Min'>1,那么就可以進行多項選擇,如果'Max'-‘Min'<=1,那么就只可以進行單項選擇。
14 ‘Min'---scalar類似13
15 ‘Position'(位置)---[left(左) bottom(底) width(寬) heigh(高)]它聲明了uicontrol的位置,格式為相對于圖形窗口左下角的標準直角坐標格式,單位為'Units'屬性所定義的單位,windowspc中‘popupmenu'類型的uicontrol的高度是由字體來設置的,并且將heigth 忽略。
16 ‘SliderStep'(滾動條步長)—[arrow_step trough_step]這個屬性聲明了一個值,這個值是經(jīng)過標定的'Max'-'Min' ,大小在0到1間,arrow-step是點滾動條上的箭頭時滾動條移動的步長, trough_step是點滾動條的滑槽時滾動條移動的步長。
17 ‘String'— string這個屬性聲明了顯示在按鈕,撥動按鈕,靜態(tài)文本,彈出菜單上的uicontrol標簽字符串,彈出菜單中的多個菜單項或者列表中的多個列表項可以聲明為字符串單元數(shù)組,字符串矩陣或者由豎線字符分開的字符串,多行可編輯文本或者靜態(tài)文本控件中的行分隔符號出現(xiàn)在字符串矩陣的各行之間或者字符串單元數(shù)組的每一個單元之間,豎線字符未被解釋成線分隔符,在'edit'類型的uicontrol中,經(jīng)過修改的文本可以通過這個屬性返回。
18.‘Style'(類型)—‘pushbutton'(按鈕鍵)|'togglebutton'(觸發(fā)器)|'radiobutton'(無線按鈕)|'chechbox'(檢查框)|'edit'(編輯)|'text'(文本)|'slider'(滑標)|'frame'(框)|'listbox'(列表)|'popupmenu'(躍上型)這個屬性聲明了要生成的uicontrol對象類型
19.’Visible’(可見)——該屬性默認值為‘on’,當該值設置成’off’時,該控件不可見。通過控制控件的顯示與不顯示,可以完成‘刷新’界面的功能。
4. 設置和獲取屬性(set and get)
Set(handle,'PropertyName',PropertyValue,…)
PropertyValue=Get(handle, 'PropertyName');
上述是設置和獲得屬性的調(diào)用語法。無論是窗口、菜單還是控件,都可以通過set修改其屬性,也可以通過get獲取其屬性。重要的是,一定要獲得它們的句柄(handle),因此,在創(chuàng)建窗口、菜單和控件時,要保存它們的句柄。
Callback函數(shù):在控件的回調(diào)函數(shù)中,我們可以通過獲得或設置相應控件上的值,來達到我們的目的。因此,我們可以將句柄通過參數(shù)的方式或聲明為全局變量,以達到在其他函數(shù)中設置獲取控件的屬性。
5. 特定區(qū)域顯示圖像
我們可以用subplot函數(shù),將界面分成很多份,然后選擇其中一份顯示圖像。但是,當我們的界面復雜時,我們需要在特定的區(qū)域內(nèi)顯示圖像。我們可以采用如下方法:
NewImageShowHandle=axes('Units','normalized',...
'position',[0.6 0.52 .3 .4],'Color',[0.2 0.2 0.2],'Visible','off','Parent',SystemFrameHandle);
imshow(uint8(reconstructed_image),'Parent',NewImageShowHandle);
也即是:先在特定的位置新建一個坐標(axes),然后在imshow函數(shù)中,設置顯示圖像的‘父窗口’即可。
6. 界面的刷新
一般情況下,不存在界面刷新的問題。但是,當我們需要在程序運行的過程中更新界面的某一個控件,我們就需要實時刷新界面。一般情況下,由于matlab在運行程序時,執(zhí)行的是主線程,因為界面線程的優(yōu)先級低于主線程,界面線程要等到主線程執(zhí)行完之后才執(zhí)行。但是,我們可以調(diào)用pause(0.000001) 函數(shù),讓主線程暫停0.000001秒,刷新界面后再去執(zhí)行主線程。基于此,我編寫了一個‘進度提示’控件。詳見示例代碼。