1、,第六章 编程进阶,6.1 句柄图形,句柄图形是一种面向对象的图形系统概念,它是建立计算机图形的必要成分。,6.1.1 句柄图形的结构层次,句柄图形基于这样的概念:一幅图的每一组成部分是一个对象,每一个对象有一系列句柄和它相关,每一个对象有可以设置和改变的属性。 由图形命令产生的每一部分都是图形对象。它们包括图形窗口(图形),还有坐标轴、线条、文本等组成部分,以及其它交互式设备,如菜单、界面等。这些对象按父对象和子对象组成层次结构。这种层次关系如下图所示:,建立图形对象的函数表,6.1.2 访问对象句柄,句柄实际上就是分配给每个对象的数字标识。每次创建一个对象时,就为它建立一个唯一的句柄。 计
2、算机屏幕作为根对象,它的句柄一般是0;图形窗口的句柄为整数;其它对象句柄是 MATLAB 满精度的浮点数。,1、获取图形对象的句柄,6.1.2 访问对象句柄,2、查找对象,函数可以快速遍历对象层并获取指定了属性值的对象句柄。该函数有如下几种调用方式: 1) h=findobj(propertyname,propertyvalue,): 在所有的对象层中查找符合指定属性值的对象,并返回其句柄个变量h; 2)h=findobj(ObjectHandle,propertyname,propertyvalue,): 把查找范围限制在句柄 ObjectHandle 指定的对象及其子对象中; 3)h=fi
3、ndobj(ObjectHandles,flat,propertyname,propertyvalue, 把查找范围限制在句柄 ObjectHandle 指定的对象中,但不包括及其子对象; 4)h=findobj:返回根对象和所有子对象的句柄; 5)h=findobj(ObjectHandles):返回 ObjectHandle 指定的对象和其所有子对象的句柄。,6.1.3 图形对象的属性和设置,所有的图形对象都有属性,正是通过设定这些属性来定义或修改图形的特征。每个不同的对象都有和它相关的属性,可以改变这些属性而不影响同类型或不同类型的其它对象。 对象属性包括属性名和与之相应的值,属性名是字
4、符串,而且,只要用足够多的字符来唯一地标识一个属性名即可。,1、get 函数:获取指定对象的属性值,其用法如下: 1)propertyvalue=get(H,propertyName): 获取句柄为H 的对象中名为propertyName 的属性值; 2)get(h):返回句柄为 h 的对象的所有属性名及其当前的取值,要求 h 只能是标量;,6.1.3 图形对象的属性和设置,3)PropertyValue=get(h): 返回一个结构,结构的每个域名就是句柄为h的对象的属性名,每个域又包括属性的值,h为标量; 4)PropertyValue=get(0,Factory) 对于所有类型的对象,返
5、回其所有可以由用户设置缺省值的属性的“出厂值”; 5)PropertyValue=get(h,Default): 返回缺省的属性值,句柄必须是标量。,6.1.3 图形对象的属性和设置,2、set 函数 :设置对象的属性,其调用方法有:,1)set(H,PropertyName,PropertyValue): 把句柄为H的对象中名为“PropertyName”的属性值设置为PropertyValue ,句柄可以是向量; 2)set(h,a):是结构,其域名就是对象的属性名,属性值包括 3)set(H,PN,PV):PN是维数组,其中的元素为需要设置的属性名, PV中的元素是要设置的属性值,把在数
6、组中指定的所有对象的属性设置为中的指定值。 4)set(H,PropertyName1,PropertyValue1,PropertyName2, PropertyValue2,): 同时设置多个属性值;,6.1.3 图形对象的属性和设置,2、set 函数 :设置对象的属性,其调用方法有:,5) A=set(H,PropertyName) 或 set(H,PropertyName): 返回或显示句柄为H的对象的指定属性的值; 6)A=set(H) 或 set(H): 返回或显示句柄为H的对象的所有属性和可能的取值; 7)set(h,DefaultObjectTypePropertyName,P
7、ropertyValue): 设置对象属性的缺省值。,6.2 图形对象属性编辑器,6.2.1 图形窗口的交互操作方式,6.3 编程设计菜单,MATLAB 的菜单可分为一次性菜单和永久性菜单。 一次性菜单是指在程序运行期间有效的菜单,程序运行结束,一次性菜单便随之消失;永久性菜单是指一经建立便永久存在的菜单,除非用 delete 或 set 命令将其删除,永久性菜单能随时响应用户的鼠标单击操作,不受程序的限制。,6.3.1 一次性菜单,建立一次性菜单的指令是 menu ,其调用格式:k=menu(菜单名, 菜单1, 菜单2,菜单n),6.3.2 永久性菜单,建立永久性菜单的函数是uimenu 。
8、,一、函数 uimenu 的用法:,函数 uimenu 的调用格式: 1)h=uimenu(PropertyName1,Value1, PropertyName2,Value2,): 在当前图形窗口顶部的菜单条上建立菜单,同时返回该菜单的句柄; 2)h=uimenu(Parent,): 参数 Parent 指定菜单的上一级菜单句柄,或是图形窗口句柄。,6.3.2 永久性菜单,常用的菜单对象包括的属性及其取值见下表:,6.3.2 永久性菜单,常用的菜单对象属性的设置:,(1) Label 和 Callback 属性:,属性Label 是在菜单项上显示的标注文本,且在文本中同时可设置该菜单项的快捷
9、键:把符号“&”放在标注字符串中用于快捷键的字符前,执行该菜单项时就可以用“Alt+该字符”来完成;,属性Callback用来设置菜单项的回调程序。,(2) Enable 属性 -设置有效状态,(3) Separator 属性 -设置分隔条,在菜单项前添加分隔符,使菜单的层 次更加清晰,6.3.2 永久性菜单,(4) Checked 属性 - 设置复选标志,(5) Position属性 - 设置菜单项的相对位置,2、用函数 uimenu 设计菜单,6.4 编程建立控件,6.4.1 控件及其属性,控件是按钮、单选框、复选框等具有一定的控制作用的实体对象的总称,不同类型的控件属性名不同,但它们都是
10、 uicontrol 对象,都由函数 uicontrol 来建立,函数 uicontrol 的用法和函数 uimenu相同。,下面介绍几个重要的属性:,1) Style 属性: 此属性表示控件的种类,属性值列举如下表:,:,6.4.1 控件及其属性,2) String 属性 String 属性是控件的名称,它的值就是显示在控件上的字符串。3) Position 属性 Position 属性决定了控件的位置和大小,它的值是一个四维向量 left,bottom,width,height.4) Callback 属性 Callback 属性是控件的事件,决定了控件被选择后,计算机将要执行什么操作,实
11、现什么功能。5) Value 属性 Value 属性反映了控件的选择状态,一般,Value 属性值等于0,表示控件处于未选状态;等于1,表示控件处于被选状态。,6.4.1 控件及其属性,6) FontSize 属性 FontSize 属性是控件字符串的字体大小,其默认值为8。 7) Enable 属性 Enable 属性决定控件是否可用,默认值是 on ,即控件是可用的。 8) HorizontalAlignment 属性 HorizontalAlignment 属性是指控件字符串在控件上的对齐方式,其默认值为Center,即中间对齐,此外,也可将其值设为 Left 和 Right ,以实现字
12、符串的左对齐和右对齐。,6.4.2 按钮,按钮的 Style 属性值为 pushbotton ,制作按钮时,也可以不指明 Style 属性值。,6.4.3 文本框和可编辑文本框,文本框和可编辑文本框的作用是在图形窗口中显示文本,文本框的 Style 属性值是 text ,可编辑文本框的 Style 属性值为 edit.,6.4.4 单选框,在某些情况下,计算机要求用户从多个选项中选择一个,而不能选择多个,这时一般用单选框。每个单选框都对应一个选项,实现相应的功能。 单选框的 Style 属性值为 radiobutton .,6.4.5 复选框,几个有用的指令:1) str=str2mat(st
13、ring1,string2,stringn): 对输入的 n 个字符串 string1 , string2 , stringn 进行整理,用添加空格的方法使每个字符串的字符数都等于最长字符串的字符数。经整理后的每一个字符串构成矩阵 str 的一个相应的行向量。,2) eval(string): 输入参数 string 是一个字符串,它代表一个 MATLAB 指令,eval(string) 指令其实就是执行与 string 对应的指令。 例:假设 string =grid on,则 eval(string) 指令等效于 grid on 指令,eval 指令常用于处理由其它指令所产生的字符串。,6
14、.4.5 复选框,3) feval(string,x1,x2,xn)string 代表一个函数,是输入参数。例如:假设 string=axis, x=-1 0 1 ,则 feval(string,x) 和 feval(string,-1 0 1) 均等效于 axis(-1 0 1),6.4.6 滚动框和列表框,滚动框和列表框的选项个数由 String 属性决定,若String 属性的值为String1,String2,Stringn,则选项个数为 n,这里要求,字符串 String1、String2 Stringn 的字符数必须相等,可通过 str2mat 指令来实现。,滚动框和列表框的 Value 属性值是 1n( n是选项的个数)之间的任一整数,默认值为1,若 Value 属性值等于 i (1 ,则表明第 i 个选项被选中。,6.4.7 滑动条,滑动条常用于控制屏幕的移动及图形的渐变等。当滑动条从左端逐渐滑动到右端时,它的 Value 属性值由 0 逐渐过渡到 1 。滑动条的 Style 属性值为 Slider 。,6.5 小结,