VB坐标问题
请问VB中Form的scaleHeight和height以及scalewidth和width是个什么样的关系。比如我设置Form的(Width,Height)=(4000...
请问VB中Form的 scaleHeight和height 以及 scalewidth 和width 是个什么样的关系。
比如 我设置Form 的(Width,Height)= (4000,4000),(ScaleWidth,ScaleHeight)=(100,100)当我改变Form的 (Width,Height) = (5000,5000),Form的(ScaleWidth,ScaleHeight)就自动变成了(128.821,125.4826),为什么会这样呢,为什么(ScaleWidth,ScaleHeight) 会变成上述数值呢?SCaleMode 选的是0 展开
比如 我设置Form 的(Width,Height)= (4000,4000),(ScaleWidth,ScaleHeight)=(100,100)当我改变Form的 (Width,Height) = (5000,5000),Form的(ScaleWidth,ScaleHeight)就自动变成了(128.821,125.4826),为什么会这样呢,为什么(ScaleWidth,ScaleHeight) 会变成上述数值呢?SCaleMode 选的是0 展开
2个回答
展开全部
Width、Height是窗体的整体宽度和高度,ScaleWidth和ScaleHeight则是窗体中客户区(也就是去掉边框、标题栏、菜单等后可实际利用的区域)的宽度和高度。
ScaleMode选0,表示客户区采用的是用户自定义坐标系统,如果设ScaleWidth=100,就表示窗体客户区的宽度为100单位,而这个单位究竟相当于多少缇(VB的默认单位)呢?我们可以把ScaleMode重新选为默认的1,这时你会发现当Width=4000时,ScaleWidth=3885,也就是说你自定义的100宽度单位=3885缇,现在让Width=5000,这时ScaleWidth=4875,也就是说客户区的宽度增长了4875/3885=1.254826倍,那么你自定义的宽度单位自然也就变为100*1.254826=125.4826咯!!!高度的情况也类似,由于这时候要考虑窗体标题栏的情况,所以虽然Width和Height是相等的数值,但ScaleWidth和ScaleHeight的数值(按缇为单位算)是不相等的,所以你自定义的100高度单位与100宽度单位也是两种不同的长度单位。具体计算如下:
当Height=4000缇时,ScaleHeight=3495缇,
当Height=5000缇时,ScaleHeight=4485缇,
因此客户区高度增长了 4485/3495=1.283262
也就是自定义的客户区高度为100*1.283262=128.3262
你会发现我计算出的高度和你的128.821有点差别,这是因为你和我的XP系统采用的桌面主题不同,这样标题栏的高度也会有所不同,但误差也不是很大。
不知道你现在看明白了没有?
另外,你怎么会得出“窗体外边框比窗体内部大很多”的说法呢?1000米和1公里,光从数字上来看,1000比1大很多,但你别忘了,它们采用的是不同的单位!!!
ScaleMode选0,表示客户区采用的是用户自定义坐标系统,如果设ScaleWidth=100,就表示窗体客户区的宽度为100单位,而这个单位究竟相当于多少缇(VB的默认单位)呢?我们可以把ScaleMode重新选为默认的1,这时你会发现当Width=4000时,ScaleWidth=3885,也就是说你自定义的100宽度单位=3885缇,现在让Width=5000,这时ScaleWidth=4875,也就是说客户区的宽度增长了4875/3885=1.254826倍,那么你自定义的宽度单位自然也就变为100*1.254826=125.4826咯!!!高度的情况也类似,由于这时候要考虑窗体标题栏的情况,所以虽然Width和Height是相等的数值,但ScaleWidth和ScaleHeight的数值(按缇为单位算)是不相等的,所以你自定义的100高度单位与100宽度单位也是两种不同的长度单位。具体计算如下:
当Height=4000缇时,ScaleHeight=3495缇,
当Height=5000缇时,ScaleHeight=4485缇,
因此客户区高度增长了 4485/3495=1.283262
也就是自定义的客户区高度为100*1.283262=128.3262
你会发现我计算出的高度和你的128.821有点差别,这是因为你和我的XP系统采用的桌面主题不同,这样标题栏的高度也会有所不同,但误差也不是很大。
不知道你现在看明白了没有?
另外,你怎么会得出“窗体外边框比窗体内部大很多”的说法呢?1000米和1公里,光从数字上来看,1000比1大很多,但你别忘了,它们采用的是不同的单位!!!
追问
你的意思是窗体的 Height 和 Width 的单位永远是缇?因为我ScaleMode和ScaleHeight,ScaleWidth时,它们并没有改变。
追答
窗体的整体样式,包括 Height 、Width 、Left、Top、标题栏、最大化、最小化、关闭按钮等等,这些都是受操作系统控制的,任何软件都不可能随意更改的(除非自己另外建立一套),这也就是不管是VB、VC还是其他设计语言做出来的标准窗体外观都完全一样的原理。而窗体内部的客户区则是可以由软件自由控制的区域,所以VB的SCaleMode和ScaleHeight,ScaleWidth只能影响到窗体内部区域(包括其中的控件),对窗体的整体外观是没有影响的。你还可以这样来理解:Width和height是对外的,所以要用统一的单位,否则随意更改单位,操作系统或其它软件的窗体不认你怎么办?而ScaleHeight,ScaleWidth则是对内的,自己内部怎么用那就可以随意了,就像在自己房间里用米、寸、英寸、甚至几步、几根手指来丈量家具之间的距离都没人说你的。
展开全部
简单地说,Width,Height是窗体连外边框整体的长宽,而ScaleWidth,ScaleHeight是不含外边框、标题栏、菜单栏、状态栏(如果有的话)的内部的长宽
追问
照你这样说,那在我上面数值的设置下会变成变成窗体外边框比窗体内部大很多。可实际情况不是这样的。
追答
咱们用代码验证,窗体里放两个按钮:
Private Sub Command1_Click()
Me.Width = 4000
Me.Height = 4000
End Sub
Private Sub Command2_Click()
Me.ScaleWidth = 100
Me.ScaleHeight = 100
End Sub
你会发现按钮2按了无用,不会改变窗体大小
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询