(5)完成上述工作后,可以点击工具栏中的“运行”按钮,将出现“Save as”对话框。将默认的untitled.fig改为snow.fig,并保存在自己设定的目录下。此时将会出现设计好的图形用户界面和对应的M文件snow.m。
2.控件编程
(1) 程序的初始化
在Matlab自动生成的snow.m文件中,有一个特殊的函数snow_OpeningFcn,该函数在主程序窗口可见之前运行,可以在这个函数里面进行一些初始化的工作,比如使得主程序窗口在桌面上居中显示以及对一些变量进行初始化等,参考代码段4:
%---------------------------------------------------------------------------------------------------------------------------------------
%代码段4
function snow_OpeningFcn(hObject, eventdata, handles, varargin)
%参数说明:
% 输入参数:
% hObject 主程序窗口的句柄
% eventdata 目前没有使用到,为后续版本的Matlab保留
% handles 用于函数间数据传递的结构类型变量,每个函数都会有这个输入参数
% varargin 用于命令行运行snow程序时传递参数用,本程序没有使用到该变量
%缺省的命令行输出
handles.output = hObject;
%下面的代码使得主程序窗口居中显示于桌面
scrsz = get(0,'ScreenSize');%获得桌面的大小
left = floor((scrsz(3) - 900) / 2);%计算主程序窗口右下脚的x轴坐标
bottom = floor((scrsz(4) - 473) / 2);%计算主程序窗口右下脚的y轴坐标
set(handles.figure_main,'Position',[left bottom 900 473]);%居中显示主程序窗口
handles.image = [];%handles.image用于保存原始图像,初始化为空数组
%进行handles变量的更新
guidata(hObject, handles);
%---------------------------------------------------------------------------------------------------------------------------------------
在代码段4中引出一个非常重要的技术,即不同回调函数间的数据传递技术。为了能在不同的回调函数之间进行数据传递,可以借助于一个所谓的handles结构性变量。对于所有由GUIDE生成的回调函数,这些函数都将handles作为一个必须的输入参数。
借助于handles进行数据传递的一个标准过程是:在回调函数A中将需要共享的数据存储在handles中的一个合适的字段中:handles.your_field(字段由程序员自己命名),然后调用guidata(hObject,handles)进行handles变量更新。为了在回调函数B中读取共享数据,只需在需要的地方使用handles.your_field格式即可访问数据。这一技术在后面的三个菜单回调函数中都被应用到,所以在此特别给予指出。
(2) 菜单回调函数
如前文所述,点击“运行”按钮后,Matlab自动生成两个文件:snow.fig和snow.m,但是截止到目前,相应的菜单均未添加相应的回调函数。为此,我们可以通过界面设计编辑窗口中的菜单编辑器(Menu Editor)“查看”回调函数(Callback)的按钮来添加【打开】、【保存】和【合成】三个二级菜单的回调函数并进行编程。
|