颜色控制 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 ' ]);