颜色控制 ulmen对象可设置两个颜色属性。' Background color’属性控制填充菜单背景的颜色。缺省值是 浅灰。另一颜色属性为' ForeGround Color',它确定菜单项文本的颜色,缺省值是黑色。 颜色属性同样能很好地用于顶层菜单条和下拉菜单。颜色可以用来表示状态信息或简单加上菜单 的特色。例如,挑选线段颜色。在子菜单中,各菜单项的背景可以填充合适的色彩 Hm green=uimenu(Hm color, 'Label ',' Green, BackgroundColor,g, Callback,set(HI line, 'Color,g): 菜单项去能 改变对象 ulmen的' Enable’值或' Visible’属性可使菜单项暂时去能。' Enable'属性通常设 为’on'。当' Enable’属性'设为'of’时,标志字符串变灰,菜单项去能。在这种状态下,菜单项保 持可见但不能被选择。此属性可用来将不恰当的菜单选择去能。 下面的例子( menu4m)说明了用两个菜单项和’ Enable’属性来设定坐标轴的'Box'属性的另 种方法 > Hm top uimenu('Label, Example): > Hm boxon uimenu(Hm top,'Label,'Set Box On. 'CallBack',[ Box,on), set(Hm boxon, '' Enable,off),', et(Hm boxoff, Enable, Enable',on )'D: > Hm boxoff uimenu(Hm top, Label,Set Box Off,... Enable Call Back ' t(gca set(hm b Enable'',''on''),’, set(Hm boxoff,' Enable,off) D: 设定 Visible’属性为'of'’,可将菜单项完全隐藏。菜单项象是从屏幕中消失,而其它莱单项改变了在 显示器上的位置以填补由当前不可见菜单造成的空隙。然而,不可见的菜单仍然存在,而且 yimeng对 象 的' Position’属性值也不改变。当属性Ⅴ isible!又重新设为’on’时,菜单项重新出现在正常的位 置 这个性质可以用来暂时地撤消一个菜单。下面的例子( menu5m)建立了两个顶层菜单和两个菜单 项 >> Hm control uimenu('Label,'Control):
颜色控制 uimenu对象可设置两个颜色属性。 ' BackGroundColor ' 属性控制填充菜单背景的颜色。缺省值是 浅灰。另一颜色属性为 ' ForeGroundColor ' ,它确定菜单项文本的颜色,缺省值是黑色。 颜色属性同样能很好地用于顶层菜单条和下拉菜单。颜色可以用来表示状态信息或简单加上菜单 的特 色。例如,挑选线段颜色。在子菜单中,各菜单项的背景可以填充合适的色彩。 >> Hm_green=uimenu(Hm_color, ' Label ' , ' Green ' , ' BackgroundColor ' , ' g ' ,... ' Callback ' , ' set(Hl_line, ' Color ' , ' g ' ) ' ); 菜单项去能 改变对象uimenu的 ' Enable ' 值或 ' Visible ' 属性可使菜单项暂时去能。 ' Enable ' 属性通常设 为 ' on ' 。当 ' Enable ' 属性 ' 设为 ' off ' 时,标志字符串变灰,菜单项去能。在这种状态下,菜单项保 持可见但不能被选择。此属性可用来将不恰当的菜单选择去能。 下面的例子(mmenu4.m)说明了用两个菜单项和 ' Enable ' 属性来设定坐标轴的 ' Box ' 属性的另一 种方法。 >> Hm_top = uimenu( ' Label ' ,Example ' ); >> Hm_boxon = uimenu(Hm_top, ' Label ' , ' Set Box On ' ... ' CallBack ' ,[... ' set(gca, ' ' Box ' ' , ' ' on ' ' ), ' ,... ' set(Hm_boxon, ' ' Enable ' ' , ' ' off ' ' ), ' ,... ' set(Hm_boxoff, ' ' Enable ' ' , ' ' Enable ' ' , ' ' on ' ' ) ' ]); >> Hm_boxoff = uimenu(Hm_top, ' Label ' ,Set Box Off ' ,... ' Enable ' , ' off ' ,... ' CallBack ' ,[... ' set(gca, ' ' Box ' ' , ' ' off ' ' ), ' ,... ' set(Hm_boxon, ' ' Enable ' ' , ' ' on ' ' ), ' ,... ' set(Hm_boxoff, ' ' Enable ' ' , ' ' off ' ' ) ' ]); 设定' Visible ' 属性为 ' off ', 可将菜单项完全隐藏。菜单项象是从屏幕中消失,而其它菜单项改变了在 显示器上的位置以填补由当前不可见菜单造成的空隙。然而,不可见的菜单仍然存在,而且uimenu 对 象 的 ' Position ' 属性值也不改变。当属性 ' Visible ' 又重新设为 ' on ' 时,菜单项重新出现在正常的位 置。 这个性质可以用来暂时地撤消一个菜单。下面的例子(mmenu5.m)建立了两个顶层菜单和两个菜单 项。 >> Hm_control = uimenu( ' Label ' , ' Control ' );
> Hm extra uimenu('Label, Extra) > Hm limit uimenu( Hm control,'Label ',Limited Menus Hm ful CallBack', ' set(Hm extra, ''Visible',on)) 当选择了 Limited Menus项时, Extra菜单就从菜单条中消失。当选择了 Full Menus项时, Extra菜单又 重新显示在原来的位置的菜单条上。 回调属性 Callback’属性值是一个 MATLAB字符串, MATLAB将它传给函数eval并在命令窗口工作空间执 行。它对于函数M文件有重要的隐含意义,我们将在本章后面继续讨论这一属性 因为' Callback’属性必须是字符串,所以在字符号内多重 MATLAB命令、后续行以及字符串都会 使必需的句法变得十分复杂。如果有不止一个命令要执行,命令间必须适当地分隔开来。例如 uimenu('Label,'Test,CallBack,' grid on: set(gca, ''Box', on)): 把一个字符串传给eval,使命令 > grid on: set( gca, 'Box','on') 在命令窗口工作空间中执行。这是合法的句法,因为命令用逗号或分号隔开,多重命令可输入到同一 命令行中。在定义回调函数时,也遵循 MATLAB规定,即在已引用的字符串内,用两个单引号来表示 单引号 字符串可以串接起来生成一个合法 MATLAB字符串,只要把它们括在方括号中。 >>uimenu(Label, Test,'Call Back,[grid on )"]); 注意字符串’ grid on含有所需的逗号以分隔两个命令 如果使用了续行号,上述命令可写为 >>uimenu( 'Label', Test CallBack grid on,’, se(gca,’"Bo 上例中命令行被分隔,每行的末尾加上了三个句号表示命令的继续。注意到上列单行的所有元素都被 保留,包括字符串分隔命令的逗号。在' grid on,…行中最后引号后的逗号是可选的:下一行开始的
>> Hm_extra = uimenu( ' Label ' , ' Extra ' ); >> Hm_limit = uimenu(Hm_control, ' Label ' , ' Limited Menus ' ,... ' CallBack ' , ' set(Hm_extra, ' ' Viseble ' ' , ' ' off ' ' ) ' ); >> Hm_full = uimenu(Hm_control , ' Label ' , ' Full Menus ' , ... ' CallBack ' , ' set(Hm_extra, ' ' Visible ' ' , ' ' on ' ' ) ' ); 当选择了Limited Menus项时,Extra菜单就从菜单条中消失。当选择了Full Menus项时,Extra菜单又 重新显示在原来的位置的菜单条上。 回调属性 ' Callback ' 属性值是一个MATLAB字符串,MATLAB将它传给函数eval并在命令窗口工作空间执 行。它对于函数M文件有重要的隐含意义,我们将在本章后面继续讨论这一属性。 因为 ' Callback ' 属性必须是字符串,所以在字符号内多重MATLAB命令、后续行以及字符串都会 使必需的句法变得十分复杂。如果有不止一个命令要执行,命令间必须适当地分隔开来。例如, >>uimenu( ' Label ' , ' Test ' , ' CallBack ' , ' grid on; set(gca, ' ' Box ' ' , ' ' on ' ' ) ' ); 把一个字符串传给eval,使命令 >> grid on; set(gca, ' Box ' , ' on ' ) 在命令窗口工作空间中执行。这是合法的句法,因为命令用逗号或分号隔开,多重命令可输入到同一 命令行中。在定义回调函数时,也遵循MATLAB规定,即在已引用的字符串内,用两个单引号来表示 单引号。 字符串可以串接起来生成一个合法MATLAB字符串,只要把它们括在方括号中。 >>uimenu( ' Label ' , ' Test ' , ' CallBack ' ,[ ' grid on, ' , ' set(gca, ' ' Box ' ' , ' ' on ' ' ) ' ]); 注意字符串 ' grid on ' 含有所需的逗号以分隔两个命令。 如果使用了续行号,上述命令可写为 >>uimenu( ' Label ' , ' Test ' ,... ' CallBack ' ,[... ' grid on, ' ,... ' set(gca, ' ' Box ' ' , ' ' on ' ' ) ' ... ]); 上例中命令行被分隔,每行的末尾加上了三个句号表示命令的继续。注意到上列单行的所有元素都被 保留,包括字符串分隔命令的逗号。在 ' grid on, …' 行中最后引号后的逗号是可选的;下一行开始的
空格起相同的作用。欲了解详情,请参阅前面关于建立行向量的章节。 如果引号、逗号和括号不正确输入,MA∏LAB将给出警告;但在复杂回调字符串中很难寻找错误 的。为了使错误最少,对包含 MATLAB语句的回调字符串请记住以下的一些规则: 把整个回调字符串括在方括号中,不要忘记最后的右括号) 把各语句括上单引号。 已引用的字符串内,要用双引号。如:' quoted’:'a'' quoted'' string';' Quote quoted''' string'"now'。在引号后要用逗号或空格结尾。 除了最后一句,各语句在引号内要以逗号或分号结尾;在引号后要用逗号或空格结尾。 有后续行的各行要以三个句号()结尾 前面的例子之一 menu4m是所涉及的回调字符串句法的很好说明。 > Hm top unimenmu(Label, Example): > HM boxon=uimenuHm top, Call Back’,[ set(Hm boxon, "Enable, "off),', set(Hm boxoff,"Enable","on)': > Hm boxoff uimenu(Hm top Label ', Set box off Enable','off'',’, Box","off set(Hm boxon,"Enable","on") set(Hm boxoff Enable","off)' 上例中还引出了关于回调函数另一个重点,在变量 Hm boxoff定义之前,在回调串中用 Hm boxoff替代 Hm boxon。因为回调串只是一个字符串, MATLAB不会给出警告,而且仅在 uimenu被激活并将字符 串传给eva时才由 MATLAB执行。它隐含有函数M文件的设计和测试,这将在本章后面讨论。 M文件的举例 下例将演示一组简单菜单的生成。该例子包含在精通 MATLAB工具箱的函数M文件 menus中。正 如下面所示的那样,这个函数文件被分隔成了若干块,以便于讨论函数的各个方面。 首先,定义一个函数并在当前的图形中用顶层Line菜单建立菜单条,该菜单分别含有三个子菜单: Line Style, Line Width, Line Coloro
空格起相同的作用。欲了解详情,请参阅前面关于建立行向量的章节。 如果引号、逗号和括号不正确输入,MATLAB将给出警告;但在复杂回调字符串中很难寻找错误 的。为了使错误最少,对包含MATLAB语句的回调字符串请记住以下的一些规则: • 把整个回调字符串括在方括号中,不要忘记最后的右括号' )' 。 • 把各语句括上单引号。 • 已引用的字符串内,要用双引号。如: ' quoted ' : ' a ' ' quoted ' ' string ' ; ' Quote ' ' a ' ' ' quoted ' ' ' string ' ' now '。在引号后要用逗号或空格结尾。 • 除了最后一句,各语句在引号内要以逗号或分号结尾;在引号后要用逗号或空格结尾。 • 有后续行的各行要以三个句号(...)结尾。 前面的例子之一mmenu4.m是所涉及的回调字符串句法的很好说明。 >> Hm_top = unimenu(Label ' , ' Example ' ); >> HM_boxon = uimenu(Hm_top,... ' Label ' , ' Set ' Box on ' ,... ' CallBack ' ,[... ' set(gca,''Box'',''on''), ' ,... set(Hm_boxon,''Enable'',''off''), ' ,... set(Hm_boxoff,''Enable'',''on'') ' ]; >> Hm_boxoff = uimenu(Hm_top,... ' Label ' , ' Set Box off ' ,... ' Enable ' , ' off ' ' , ' ,... ' CallBack ' ,[... ' set(gca,''Box'',''off'', ' ,... ' set(Hm_boxon,''Enable'',''on''), ' ,... ' set(Hm_boxoff''Enable'',''off'') ' ]; 上例中还引出了关于回调函数另一个重点,在变量Hm_boxoff定义之前,在回调串中用Hm_boxoff替代 Hm_boxon。因为回调串只是一个字符串,MATLAB 不会给出警告,而且仅在uimenu被激活并将字符 串传给eval时才由MATLAB执行。它隐含有函数M文件的设计和测试,这将在本章后面讨论。 M文件的举例 下例将演示一组简单菜单的生成。该例子包含在精通MATLAB工具箱的函数M文件mmenus中。正 如下面所示的那样,这个函数文件被分隔成了若干块,以便于讨论函数的各个方面。 首先,定义一个函数并在当前的图形中用顶层Line菜单建立菜单条,该菜单分别含有三个子菜单: Line Style,Line Width,Line Color
function menus( %o MMENUS Simple menu example o MMENUS uses waitforbuttonpress and gco in callback strings to let the user make a menu selection and then select an object by clicking on it with the mouse. The callback strings then use the set function to apply the property value to the selected Copyright(c)1996 by Prentice-Hall, Inc Hm line =uimenu(gcf, 'label '. 'Line') Hm Istyle uimenu(Hm line,'label ,Line Style); Hm Iwidth=uimenu(Hm line, 'label,' Line width ') Hm Icolor= uimenu(Hm 'label,' Line Color); 其次,使用 waitforbuttonpress和gco得到当前对象的句柄,确认它为一个线对象,并采用适当的 Linestyle’值。注意这些菜单项句柄以后不再使用,所以它们不必保存 CallBack,( waitforbuttonpress if get(gco,"type")==line t(gco, "LineStyle","-") end D): uimenu( Hm Istyle, 'Label, Dotted f get( uimenu(Hm Istyle,'Label, Dashed Callback,[ waitforbuttonpress uimenu( Hm Istyle bel’, DashDot Callback,[ waitforbuttonpress if get(go set(gco, "Line Style","":") d'D)
function mmenus() % MMENUS Simple menu example. % MMENUS uses waitforbuttonpress and gco in callback strings % to let the user make a menu selection and then select an object % by clicking on it with the mouse. The callback strings then use % the set function to apply the property value to the selected % object. % Copyright (c) 1996 by Prentice-Hall,Inc. Hm_line = uimenu(gcf, ' label ' . ' Line ' ); Hm_lstyle = uimenu(Hm_line, ' label ' , ' Line Style ' ); Hm_lwidth = uimenu(Hm_line, ' label ' , ' Line width ' ); Hm_lcolor = uimenu(Hm_ ' label, ' Line Color ' ); 其次,使用waitforbuttonpress和gco得到当前对象的句柄,确认它为一个线对象,并采用适当的 ' Linestyle ' 值。注意这些菜单项句柄以后不再使用,所以它们不必保存。 uimenu(Hm_lstyle, ' Label ' ,Solid ' ,... ' CallBack ' ,( ' waitforbuttonpress; ' ,... ' if get(gco,''type'')==''line'', ' ... ' set(gco,''LineStyle'',''-''), ' ... ' end ' ]); uimenu(Hm_lstyle, ' Label ' ,Dotted ' ,... ' Callback ' ,[ ' waitforbuttonpress; ' ,... ' if get(gco,''Type'')==''line'', ' ,... ' set(gco ,''LineStyle'','','':''), ' ... ' end ' ]); uimenu(Hm_lstyle, ' Label ' ,Dashed ' ,... ' Callback ' ,[ ' waitforbuttonpress; ' ,... ' if get(gco,''Type'')==''line'', ' ,... ' set(gco ,''LineStyle'',''-'':''), ' ... ' end ' ]); uimenu(Hm_lstyle, ' Label ' ,DashDot ' ,... ' Callback ' ,[ ' waitforbuttonpress; ' ,... ' if get(gco,''Type'')==''line'', ' ,... ' set(gco ,''LineStyle'',''-'':''), ' ... ' end ' ]);
现在,对 Line width子菜单项也做同样的操作: uimenu(Hm Iwitdth, 'Label,'Default CallBack',[ witforbuttonpress:’,¨ if get( gco,"Type")="line ct(gco, "Line Width", 0.5) d']) uimenu( Hm lwitdth, 'Label, Thick, set(gco, " Line width", 2.0) uimenu(Hm Iwitdth,'Label, Thicker CallBack,[ witforbuttonpress set(gco, " Line width",3.0) menu( Hm Iwitdth, ' Label Thickest CallBack,['witforbuttonpress: if get(gco,"Type)=l set(gco, " Line Width",4.0) 对 Line color子菜单项也做同样的操作。将菜单项背景加色并在合适时改变文本颜色。 uimenu( Hm Icolor,'Label,yellow Background Color,y CallBack,['witforbuttonpress if get(gco,"Typ set(gco, " color","y),', uimenu(Hm Icolor, 'Label,'Magenta' BackgroundColor,'m,'ForegroundColor,'w CallBack,['witforbuttonpress set(gco,"color","m")
现在,对Line width子菜单项也做同样的操作: uimenu(Hm_lwitdth, ' Label ' , ' Default ' ,... ' CallBack ' ,[ ' witforbuttonpress; ' ,... ' if get(gco,''Type'')==''line'', ' ,... ' set(gco ,''LineWidth'',0.5), ' ,... ' end ' ]); uimenu(Hm_lwitdth, ' Label ' , ' Thick ' ,... ' CallBack ' ,[ ' witforbuttonpress; ' ,... ' if get(gco,''Type'')==''line'', ' ,... ' set(gco ,''LineWidth'',2.0), ' ,... ' end ' ]); uimenu(Hm_lwitdth, ' Label ' , ' Thicker ' ,... ' CallBack ' ,[ ' witforbuttonpress; ' ,... ' if get(gco,''Type'')==''line'', ' ,... ' set(gco ,''LineWidth'',3.0), ' ,... ' end ' ]); uimenu(Hm_lwitdth, ' Label ' , ' Thickest ' ,... ' CallBack ' ,[ ' witforbuttonpress; ' ,... ' if get(gco,''Type'')==''line'', ' ,... ' set(gco ,''LineWidth'',4.0), ' ,... ' end ' ]); 对Line Color子菜单项也做同样的操作。将菜单项背景加色并在合适时改变文本颜色。 uimenu(Hm_lcolor, ' Label ' , ' yellow ' ,... ' BackgroundColor ' , ' y ' ,... ' CallBack ' ,[ ' witforbuttonpress; ' ,... ' if get(gco,''Type'')==''line'', ' ,... ' set(gco ,''color'', ' ''y''), ' ,... ' end ' ]); uimenu(Hm_lcolor, ' Label ' , ' Magenta ' ,... ' BackgroundColor ' , ' m ' , ' ForegroundColor ' , ' w ' ... ' CallBack ' ,[ ' witforbuttonpress; ' ,... ' if get(gco,''Type'')==''line'', ' ,... ' set(gco ,''color'', ' ''m''), ' ,... ' end ' ]);
uimenu(Hm Ico olor, Label',yan, Background Color',c, CallBack, witforbuttonpress: if get(gco,"Type")="line d']) uimenu( Hm Icolor,'Label,'Red ackground Color,'r,' ForegroundColor',w Call Back',['witforbuttonpress if get( gco,"Type")=="line 'set(gco,"color","r"),' d]) uimenu(Hm Icolor,'Label,' Green, CallBack,['witforbuttonpress: if get(gco, Type")=="line set( gco, color uimenu( Hm Icolor,'Label,'Blue Background Color','b,Foreground CallBack,,['witforbuttonpress: ,hdColor',w, if get( gco,"Type")=="line set( gco, color uimenu(Hm Icolor, 'Label White BackgroundColor', 'w' CallBack,[ witforbuttonpress uimenu(Hm Icolor, 'Label,,'Black, BackgroundColor',k,' ForegroundColor,w CallBack,['witforbuttonpress
uimenu(Hm_lcolor, ' Label ' , ' yan ' ,... ' BackgroundColor ' , ' c ' ,... ' CallBack ' ,[ ' witforbuttonpress; ' ,... ' if get(gco,''Type'')==''line'', ' ,... ' set(gco ,''color'', ' ''c''), ' ,... ' end ' ]); uimenu(Hm_lcolor, ' Label ' , ' Red ' ,... ' BackgroundColor ' , ' r ' , ' ForegroundColor ' , ' w ' ,... ' CallBack ' ,[ ' witforbuttonpress; ' ,... ' if get(gco,''Type'')==''line'', ' ,... ' set(gco ,''color'', ' ''r''), ' ,... ' end ' ]); uimenu(Hm_lcolor, ' Label ' , ' Green ' ,... ' BackgroundColor ' , ' g ' ,... ' CallBack ' ,[ ' witforbuttonpress; ' ,... ' if get(gco,''Type'')==''line'', ' ,... ' set(gco ,''color'', ' ''g''), ' ,... ' end ' ]); uimenu(Hm_lcolor, ' Label ' , ' Blue ' ,... ' BackgroundColor ' , ' b ' , ' ForegroundColor ' , ' w ' ,... ' CallBack ' ,[ ' witforbuttonpress; ' ,... ' if get(gco,''Type'')==''line'', ' ,... ' set(gco ,''color'', ' ''b''), ' ,... ' end ' ]); uimenu(Hm_lcolor, ' Label ' , ' White ' ,... ' BackgroundColor ' , ' w ' ,... ' CallBack ' ,[ ' witforbuttonpress; ' ,... ' if get(gco,''Type'')==''line'', ' ,... ' set(gco ,''color'', ' ''w''), ' ,... ' end ' ]); uimenu(Hm_lcolor, ' Label ' , ' Black ' ,... ' BackgroundColor ' , ' k ' , ' ForegroundColor ' , ' w ' ,... ' CallBack ' ,[ ' witforbuttonpress; '
if get(gco, "Type")="line" 为使这一函数更完全,可用同样方法增加另外的菜单以改变坐标轴、曲面、补片和图形的属性。例 如,下面加上了一个 Color映象以改变图形颜色的映象 Hm cmap=uimenu(gcf,'Label,' Color Map') CallBack,' brighten(3)') uimenu(Hm cmap,'Label,' Darker','CallBack',' brighten(- 3)); uimenu( Hm cmap, 'Label,' Default,'Call Back',' colormap(default")) uimenu( Hm cmap, 'Label ',' Gray,CallBack,'colormap(gray)): uimenu(Hm cmap,'Label,'Hot,CallBack, colormap(hot)): uimenu( Hm cmap,'Label,Cool,'Call Back', ' colormap(cool)): uimenu( Hm cmap Label,'Bone,'Call Back',colormap(bone)): uimenu(Hm cmap,'Label, Copper',' ',' colormap(copper)) uimenu( Hm cmap, 'Label,'Pink,CallBack color lap(pink)) uimenu(Hm cmap,'Label,Prism,'Call Back',' colormap(prism)) uimenu(Hm cmap, 'Label,'Jet',CallBack,'colormapgjet)') uimenu( Hm cmap, 'Label ','Flag,'Call Back',colormap(flag)): uimenu( Hm cmap,'Label,'HSV,' CallBack,colormap(hsvflag)') 最后,加上含有两个菜单项的Quit菜单。其中, Close figure关闭图形; Remove menus让图形打开但删 除用户的顶层菜单及所有它的子菜单。 drawnow命令立即删除菜单。 Hm quit=-uimenu( GCF,'IABEL','quit) uimenu(Hm quit,'Label,' Close Figure,'CallBack',close: return ') uimenu( Hm quit,'Label,Remove Menu delete(findobj (gcf, Type, uimenu',"parent", gcf)) drawnow D); 精通 MATLA B工具箱中有许多采用这种技术的函数和其它建立有用的基于对象工具的函数。其中许多 函数将在本章后面详细讨论。 21.4控制框 在各计算机平台上,窗口系统都采用控制框和菜单,让用户进行某些操作,或设置选项或属性
' if get(gco,''Type'')==''line'', ' ,... ' set(gco ,''color'', ' ''k''), ' ,... ' end ' ]); 为使这一函数更完全,可用同样方法增加另外的菜单以改变坐标轴、曲面、补片和图形的属性。例 如,下面加上了一个Color映象以改变图形颜色的映象。 Hm_cmap=uimenu(gcf, ' Label ' , ' Color Map ' ); uimenu(Hm_cmap, ' Label ' , ' Lighter ' , ' CallBack ' , ' brighten(.3) ' ); uimenu(Hm_cmap, ' Label ' , ' Darker ' , ' CallBack ' , ' brighten(-.3) ' ); uimenu(Hm_cmap, ' Label ' , ' Default ' , ' CallBack ' , ' colormap(''default'') ' ); uimenu(Hm_cmap, ' Label ' , ' Gray ' , ' CallBack ' , ' colormap(gray) ' ); uimenu(Hm_cmap, ' Label ' , ' Hot ' , ' CallBack ' , ' colormap(hot) ' ); uimenu(Hm_cmap, ' Label ' , ' Cool ' , ' CallBack ' , ' colormap(cool) ' ); uimenu(Hm_cmap, ' Label ' , ' Bone ' , ' CallBack ' , ' colormap(bone) ' ); uimenu(Hm_cmap, ' Label ' , ' Copper ' , ' CallBack ' , ' colormap(copper) ' ); uimenu(Hm_cmap, ' Label ' , ' Pink ' , ' CallBack ' , ' colormap(pink) ' ); uimenu(Hm_cmap, ' Label ' , ' Prism ' , ' CallBack ' , ' colormap(prism) ' ); uimenu(Hm_cmap, ' Label ' , ' Jet ' , ' CallBack ' , ' colormap(jet) ' ); uimenu(Hm_cmap, ' Label ' , ' Flag ' , ' CallBack ' , ' colormap(flag) ' ); uimenu(Hm_cmap, ' Label ' , ' HSV ' , ' CallBack ' , ' colormap(hsvflag) ' ); 最后,加上含有两个菜单项的Quit菜单。其中,Close Figure关闭图形;Remove Menus让图形打开但删 除用户的顶层菜单及所有它的子菜单。drawnow命令立即删除菜单。 Hm_quit=uimenu(GCF, ' lABEL ' , ' quit ' ); uimenu(Hm_quit, ' Label ' , ' Close Figure ' , ' CallBack ' , ' close;return ' ); uimenu(Hm_quit, ' Label ' , ' Remove Menu ' ,... ' Callback ' ,[... ' delete(findobj(gcf,''Type,''uimenu'',''parent'',gcf)), ' ,... ' drawnow ' ]); 精通MATLAB工具箱中有许多采用这种技术的函数和其它建立有用的基于对象工具的函数。其中许多 函数将在本章后面详细讨论。 21.4 控制框 在各计算机平台上,窗口系统都采用控制框和菜单,让用户进行某些操作,或设置选项或属性
控制框是图形对象,如图标、文本框和滚动条,它和菜单一起使用以建立用户图形界面,称之为窗口 系统和计算机窗口管理器。 MATLAB控制框,又称 uncontrol,与窗口管理器所用的函数十分相似。它们是图形对象,可以放 置在 MATLAB的图形窗中的任何位置并用鼠标激活。 MATLAB的 uncontrol包括按钮、滑标、文本框及 弹出式菜单 由 MATLAB生成的 uncontrol对象在 Macintosh、MS- Windows和 X Window系统平台上,有稍微不同 的外观,因为窗口系统表达图形对象的方法是不同的。但是,功能本质是相同的,所以相同的 MATLAB编码将生成同样的对象,它在不同平台完成同样的功能 Uicontrol由函数 uncontrol生成。常用句法与前面所讨论的 Juimenu相同。 >>Hc_1=uncontrol(Hf fig,'Property Name, Property Value,.) 其中,Hc1是由函数 uncontrol生成 uncontrol对象的句柄。通过设定 uncontrol对象的属性值 PropertyName',' Property Value’定义了 uncontrol的属性;Hffg是父对象的句柄,它必须是图形 如果图形对象句柄省略,就用当前的图形 建立不同类型的控制框 MATLAB共有八种不同类型或型式的控制框。它们均用函数 uncontrol建立。属性'stye'决定了所 建控制框的类型。· Callback’属性值是当控制框激活时,传给eval在命令窗口空间执行的 MATLAB 符串。 下面将分别对八种 uncontrol对象进行讨论,并用示例说明。 uncontrol对象的属性更为透彻的讨论和 应用中更为完整的例子将在以后给出。 按钮键 按钮键,又称命令按钮或只叫按钮,是小的长方形屏幕对象,常常在对象本身标有文本。将鼠标 指针移动至对象,来选择按钮键 uncontrol,单击鼠标按钮,执行由回调字符串所定义的动作。按钮键的 Style’属性值是' pushbutton' 按钮键典型地用于执行一个动作而不是改变状态或设定属性。下面的例子( methl.m)建立标志 为Cloe的按钮键 uncontrol。当激活该按钮时, close关闭当前的图形。以象素为单位的' Position'属性 定义按钮键的大小和位置,这是缺省的" Units'属性值。属性' String'定义了按钮的标志 >>Hc close=uncontrol(goff,' Style,push Position',[101010025], String, Close, CallBack,'close) 无线按钮 无线按钮,又称选择按钮或切换按钮,它由一个标志并和标志文本的左端一个小圆圈或小菱形所
控制框是图形对象,如图标、文本框和滚动条,它和菜单一起使用以建立用户图形界面,称之为窗口 系统和计算机窗口管理器。 MATLAB控制框,又称uicontrol,与窗口管理器所用的函数十分相似。它们是图形对象,可以放 置在MATLAB的图形窗中的任何位置并用鼠标激活。MATLAB的 uicontrol包括按钮、滑标、文本框及 弹出式菜单。 由MATLAB生成的uicontrol对象在Macintosh、MS-Windows 和X Window系统平台上,有稍微不同 的外观,因为窗口系统表达图形对象的方法是不同的。但是,功能本质是相同的,所以相同的 MATLAB编码将生成同样的对象,它在不同平台完成同样的功能。 Uicontrol由函数uicontrol生成。常用句法与前面所讨论的uimenu相同。 >>Hc_1=uicontrol(Hf_fig, ' PropertyName ' ,PropertyValue,...) 其中,Hc_1是由函数uicontrol生成uicontrol对象的句柄。通过设定uicontrol对象的属性值' PropertyName' , ' PropertyValue ' 定义了uicontrol的属性;Hf_fig是父对象的句柄,它必须是图形。 如果图形对象句柄省略,就用当前的图形。 建立不同类型的控制框 MATLAB共有八种不同类型或型式的控制框。它们均用函数uicontrol建立。属性 ' Style ' 决定了所 建控制框的类型。 ' Callback ' 属性值是当控制框激活时,传给eval在命令窗口空间执行的MATLAB字 符串。 下面将分别对八种uicontrol对象进行讨论,并用示例说明。uicontrol对象的属性更为透彻的讨论和 应用中更为完整的例子将在以后给出。 按钮键 按钮键,又称命令按钮或只叫按钮,是小的长方形屏幕对象,常常在对象本身标有文本。将鼠标 指针移动至对象,来选择按钮键uicontrol,单击鼠标按钮,执行由回调字符串所定义的动作。按钮键的 ' Style ' 属性值是 ' pushbutton ' 。 按钮键典型地用于执行一个动作而不是改变状态或设定属性。下面的例子(mmctl1.m)建立标志 为Close的按钮键uicontrol。当激活该按钮时,close关闭当前的图形。以象素为单位的' Position ' 属性 定义按钮键的大小和位置,这是缺省的 ' Units ' 属性值。属性 ' String ' 定义了按钮的标志。 >>Hc_close=uicontrol(gcff, ' Style ' , ' push ' ,... ' Position ' ,[10 10 100 25],... ' String ' ,Close ' ,... ' CallBack ' , ' close); 无线按钮 无线按钮,又称选择按钮或切换按钮,它由一个标志并和标志文本的左端一个小圆圈或小菱形所
形 成。当选择时,圆圈或菱形被填充,且' Value’属性值设为1:若未被选择,指示符被清除,'alue 属性值设为0。无线按钮键's!yle'的属性值是' radiobutton'。 无线按钮典型地用在一组互斥的选项中选择一项。为了确保互斥性,各无线按钮 uncontrol的回调字 符串必须不选组中其它项,将它们各项的' Value设为0。然而,这只是一个约定,如果需要,无线按 钮可与检查框交换使用 下面的例子(mmct2.m)建立了两个互斥选项的无线按钮,它将坐标轴·Box’属性开或关闭 > He boxon=uncontrol(gcf,'Style,radio CallBack,[ set(Hc boxon,"Value",I gca,"Box","on")’]) > He boxoff uncontrol(gcf, 'Style,radio String,' Set box off CallBack,[ Box","ofr")’) 检查框 检查框,又称切换按钮,它由具有标志并在标志的左边的一个小方框所组成。激活时, uncontrol在 检查和清除状态之间切换。在检査状态时,根据平台的不同,方框被填充,或在框内含x,' Value'属 性值设为1。若为清除状态,则方框变空," Value'属性值设为0 检査框典型地用于表明选项的状态或属性。通常检査框是独立的对象,如果需要,检査框可与无 线按钮交换使用。 下面的例子( mmcl3.m)建立了一个检査框 uncontrol,设置坐标轴’Box'属性,当此检査框被激 活时,测试' Value'属性以确定检査框是否以往被检査或清除过,并适当设置'Box'属性 > He box =uncontrol(gcf, 'Style,check Axis bc CallBack, I
形 成。当选择时,圆圈或菱形被填充,且 ' Value ' 属性值设为1;若未被选择,指示符被清除, ' Value ' 属性值设为0。无线按钮键 ' style ' 的属性值是 ' radiobutton ' 。 无线按钮典型地用在一组互斥的选项中选择一项。为了确保互斥性,各无线按钮uicontrol的回调字 符串必须不选组中其它项,将它们各项的 ' Value ' 设为0。然而,这只是一个约定,如果需要,无线按 钮可与检查框交换使用。 下面的例子(mmctl2.m)建立了两个互斥选项的无线按钮,它将坐标轴 ' Box ' 属性开或关闭。 >> Hc_boxon = uicontrol(gcf, ' Style ' , ' radio ' ,... ' Position ' ,[20 45 100 20],... ' String ' , ' Set box on ' Value ' ,0,... ' ,... ' CallBack ' ,[... ' set(Hc_boxon ' ,''Value'',1 ' ... ' set(Hc_boxoff ' ,''Value'',0 ' ... ' set(gca,''Box'',''on'') ' ]); >> Hc_boxoff = uicontrol(gcf, ' Style ' , ' radio ' ,... ' Position ' ,[20 20 100 20],... ' String ' , ' Set box off ' Value ' ,1,... ' ,... ' CallBack ' CallBack ' ,[... ' set(Hc_boxon ' ,''Value'',0 ' ... ' set(Hc_boxoff ' ,''Value'',1 ' ... ' set(gca,''Box'',''off'') ' ]); 检查框 检查框,又称切换按钮,它由具有标志并在标志的左边的一个小方框所组成。激活时,uicontrol在 检查和清除状态之间切换。在检查状态时,根据平台的不同,方框被填充,或在框内含x, ' Value ' 属 性值设为1。若为清除状态,则方框变空, ' Value ' 属性值设为0。 检查框典型地用于表明选项的状态或属性。通常检查框是独立的对象,如果需要,检查框可与无 线按钮交换使用。 下面的例子(mmctl3.m)建立了一个检查框uicontrol, 设置坐标轴 ' Box ' 属性,当此检查框被激 活时,测试 ' Value ' 属性以确定检查框是否以往被检查或清除过,并适当设置 ' Box ' 属性。 >> Hc_box = uicontrol(gcf, ' Style ' , ' check ' ,... ' Position ' ,[100 50 100 20],... ' String ' , ' Axis Box ' ,... ' CallBack ' ,[
set(gca,"Box",on"), (gca,"Box",°ofP, 静态文本框 静态文本框是仅仅显示一个文本字符串的 Unicontrol,该字符串是由' string’属性所确定的。静态文 本框的' Style'属性值是'text’。静态文本框典型地用于显示标志、用户信息及当前值 静态文本框之所以称之为’静态’,是因为用户不能动态地修改所显示的文本。文本只能通过改变 属性来更 在ⅹ Window系统中,静态文本框可只含有一行文字:如文本框太短,不能容纳文本串,则只显示 部分文字。然而在 Macintosh和 MS-Window平台,长于文本框的文本串将字串起来,即在可能的地方, 用词间分割的虚线显示多行。 下面的例子(mmct14m)建立了含有 MATLAB版本号的文本框。 > He ver =uimenu(gcf,' Style,text Position',[101015020] String,[MATLAB Version, version)) 与其它的文本对象,如:坐标标题和坐标标志不同,函数的编著者对用在 contro文本串的字体不明显 地控制。用在 uncontrol文本串的字体和命令窗口的字体一致,可由用户设定 X window系统的用户在激活 MATLAB时,可以给出命令行的参量,如 matlab -fn 9x14bold 该命令在命令窗和 uncontrol文本串中使用9x14bold字体。 Macintosh对命令窗和 uicontro文本串使用相同 的字体,但字体可以由用户在命令窗的 Options菜单中用 Text Style项来设定。PC用户具有选项,可从命 令窗口的 Options菜单的 Command window Font项来设置命令窗口字体,并从同一菜单中的 Uncontrol Font项,为 uncontrol文本串设置不同的字体。我们希望未来的 MATLAB版本会在 yimeng?和 uncontrol文 本串中增加控制字体的属性。 可编辑文本框 编辑文本框,象静态文本框一样,在屏幕上显示字符。但与静态文本框不同,可编辑文本框允许 用户动态地编辑或重新安排文本串,就象使用文本编辑器或文字处理器一样。在' String'属性中有该 信息。可编辑文本框 uncontrol的' Style'属性值是’edit'。可编辑文本框典型地用在让用户输入文本串 或特定值 可编辑文本框可包含一行或多行文本。单行可编辑文本框只接受一行输入,而多行可编辑文本框
' if get(Hc_box,''Value'')==1, ' ... ' set(gca,''Box'',''on''), ' ... ' else, ' ... ' (gca,''Box'',''off'', ' ... ' end ' ]); 静态文本框 静态文本框是仅仅显示一个文本字符串的uicontrol,该字符串是由 ' string ' 属性所确定的。静态文 本框的 ' Style ' 属性值是 ' text ' 。静态文本框典型地用于显示标志、用户信息及当前值。 静态文本框之所以称之为 ' 静态 ' ,是因为用户不能动态地修改所显示的文本。文本只能通过改变 ' String ' 属性来更改。 在X Window系统中,静态文本框可只含有一行文字;如文本框太短,不能容纳文本串,则只显示 部分文字。然而在Macintosh和MS-Window平台,长于文本框的文本串将字串起来,即在可能的地方, 用词间分割的虚线显示多行。 下面的例子(mmct14.m)建立了含有MATLAB版本号的文本框。 >> Hc_ver = uimenu(gcf, ' Style ' , ' text ' ,... ' Position ' ,[10 10 150 20],... ' String ' ,[ ' MATLAB Version ' ,version]); 与其它的文本对象,如:坐标标题和坐标标志不同,函数的编著者对用在uicontrol文本串的字体不明显 地控制。用在uicontrol文本串的字体和命令窗口的字体一致,可由用户设定。 X window系统的用户在激活MATLAB时,可以给出命令行的参量,如 matlab -fn 9x14bold 该命令在命令窗和uicontrol文本串中使用9x14bold字体。Mocintosh对命令窗和uicontrol文本串使用相同 的字体,但字体可以由用户在命令窗的Options菜单中用Text Style项来设定。PC用户具有选项,可从命 令窗口的Options菜单的Command Window Font项来设置命令窗口字体,并从同一菜单中的Uicontrol Font项,为uincontrol文本串设置不同的字体。我们希望未来的MATLAB版本会在uimenu和uicontrol文 本串中增加控制字体的属性。 可编辑文本框 编辑文本框,象静态文本框一样,在屏幕上显示字符。但与静态文本框不同,可编辑文本框允许 用户动态地编辑或重新安排文本串,就象使用文本编辑器或文字处理器一样。在 ' String ' 属性中有该 信息。可编辑文本框uicontrol的 ' Style ' 属性值是 ' edit ' 。可编辑文本框典型地用在让用户输入文本串 或特定值。 可编辑文本框可包含一行或多行文本。单行可编辑文本框只接受一行输入,而多行可编辑文本框