程序是:
%目标:制作一个能绘制任意图形的交互界面。它包括:可编辑文本框、弹出框、列表框。
%主要内容:A如何使编辑框允许输入多行指令。B在利用M函数文件创建用户界面时,如何依靠全局变量传递控件的图柄,保证回调动作正确执行。
function exm104_3()
global hedit hpop hlist
clf reset
set(gcf,'unit','normalized','position',[0.1,0.4,0.85,0.35]);%设置图形窗的大小
set(gcf,'defaultuicontrolunits','normalized');
set(gcf,'defaultuicontrolfontsize',11)
set(gcf,'defaultuicontrolfontname','隶书');
set(gcf,'defaultuicontrolhorizontal','left');
set(gcf,'menubar','none');%删除图形窗工具条
str='通过多行指令绘图的交互界面';
set(gcf,'name',str,'numbertitle','off');%书写图形窗名
h_axes=axes('position',[0.05,0.15,0.45,0.70],'visible','off');%定义轴位框位置
uicontrol(gcf,'style','text',...%制作静态文本框
'position',[0.52,0.87,0.26,0.1],...
'string','绘图指令输入框');
hedit=uicontrol(gcf,'style','edit',...%制作可编辑文本框
'position',[0.52,0.05,0.26,0.8],...
'max',2);%取2,使Max-Min>1,而允许多行输入
hpop=uicontrol(gcf,'style','popup',...%制作弹出菜单
'position',[0.8,0.73,0.18,0.12],...
'string','spring|summer|autumn|winter');%设置弹出框中选项名
hlist=uicontrol(gcf,'style','list',...%制作列表框
'position',[0.8,0.23,0.18,0.37],...
'string','Grid on|Box on|Hidden off|Axis off',...%设置列表框中选项名
'Max',2);%取2,使Max-Min>1,而允许多项选择
hpush=uicontrol(gcf,'style','push',...%制作与列表框配用的按键
'position',[0.8,0.05,0.18,0.15],'string','Apply');
set(hedit,'callback','calledit1');%编辑框输入引起回调
set(hpop,'callback','calledit1');%弹出框选择引起回调
set(hpush,'callback','calledit1');%按键引起回调
%子函数
function calledit1()
global hedit hpop hlist
ct=get(hedit,'string');%获得输入的字符串函数
vpop=get(hpop,'value');%获得选项的位置标识
vlist=get(hlist,'value');%获得选项位置向量
if ~isempty(ct)%可编辑框输入非空时
eval(ct')%运行从编辑文本框送入的指令
popstr={'spring','summer','autumn','winter'};%弹出框色图矩阵
liststr={'grid on','box on','hidden off','axis off'};%列表框选项内容
invstr={'grid off','box off','hidden on','axis on'};%列表框的逆指令
colormap(eval(popstr{vpop}));%采用弹出框所选色图
w=zeros(1,4);w(vlist)=1;
for k=1:4
if w(k)%按列表选项影响图形
eval(liststr{k});
else
eval(invstr{k});
end
end
end
写在一个m文件中。
在运行生成的exe时,它说:undefined function or variable 'calledit1'.
error while evaluating uicontrol callback |