如何理解VB窗体中的scale类属性,及width height属性之间的关系(ZT:blog.csdn.net/lizanhong)

来自: blog.csdn.net/lizanhong

如何理解VB窗体中的scale类属性
及width height属性之间的关系

         VB中的SCALEHIEGT,SCALEWIDTH,与窗体中的WIDTH,HEIGHT的区别及关系是许多VB初学者难以理解的。本人在学习DELPHI的过程中也曾经对这类似的概论搞不清楚,但通过这次对VB中这些类似概念的学习后,可以说是已掌握了这种概念及原理了。现在回头看DELPHI的相关知识点有豁然开朗的感觉,VB的确是可视化编程入门的最佳语言。


问题的提出
  在VB中默认的度量单位是缇,这是一种跟屏幕分辨率无关的一种度量单位,主要是用在打印机上的,大概是1缇=1/20磅。其它的一些单位请查看MSDN。使用缇就会给我们带来一些麻烦,因为我们都习惯于使用像素来度量窗体及控件的大小,并使用显示器当前的分辨率作参考物来确定窗体的适当大小,当我们想动态地改变窗体的大小的时候我们该如何确定正确的数值呢,想动态地移动窗体中的控件,该如何确定控件的位置呢?同时,在VB的窗体中同时存在着这样的一些属性:scaleWidth,scaleHeight,scaleLeft,scaleTop,scaleMode,Width,Height,他们之间是怎样的关系,是如何影响窗体中控件的大小的呢?通过下面的解说,我们就能解决上面所提到的问题。


预备知识
         其实在VB中的窗体内部(除去窗体边框及标标题栏的区域)有一个类似于画布的东西,它始终是占满整个窗体区域的,他有一个坐标系统,默认的是原点就是窗体的左上角,坐标是0,0 然后往左伸延的就是X轴,往下就是Y轴了,但是这个坐标的单位默认就是缇,当然我们是可以修改成其它类型的单位,要修改度量单位的话就要设定窗体的scaleMode属性。如:设为像素scaleMode=3 。这个坐标系统是用来确定要在什么位置上通过PRINT等方法来作图的,以及确定在这个容器中的什么位置上放置控件,以及跟窗体宽和高的比例情况。

scale类属性的作用
         清楚了窗体有这样一个画布及它的坐标后,我们再来看看有关这个坐标系统的属性。这些scale类型属性主要是用来设定画布坐标系统的数值跟窗体的高宽数值比例情况的。具体是怎样的关系及怎样影响在下面有论说。scaleLeft,scaleTop这两个属性是用来设定这个坐标系统的原点位置的,系统默认的scaleLeft,scaleTop是0,也就是说原点在窗体的左上角了,坐标系统只有大于0的那一块坐标,这样的好处是可以很直观地使用这个坐标系统因为参照点是0且是从窗体的左上角开始的。如果把这两个值设定为大于0的话,画布的坐标就有正负区域了,这样就更像我们数学上的坐标系统了。scaleMode用于设定坐标轴的度量单位。

width,Height的作用
         这两个属性是用于设定窗体的宽和高,他们的单位始终是缇,会直接影响到画布的大小及坐标的比例情况,要动态设置窗体的大小也只能通过这两个属性来设定。

这些属性的关系
         默认情况下,窗体的宽和高是跟窗体上的画布的宽和高是一样大小的,且画布的坐标原点就是窗体的左上角。也就是说,画布的宽和窗体的宽是1:1的关系,也就是说画布的1缇宽度相当于窗体的1缇宽度。那么当我们在窗体上用print.circle (500,500),200来画一个圆的时候,原点就是在距窗体顶部500个缇,左边500个缇,半径是200个缇。现在我们尝试把窗体上的scaleHeight,scaleWidth修改为原来的1/2,现在也是用同样的方法来画一个圆,对比这一下现在的圆跟修改前的圆,可以发现当前圆的半径比原来的扩大了一倍,而且圆心的位置也改变了。同样的参数为什么会有不一要结果呢?这就是scaleHeigh scaleWidth起的作用,假如窗体原本的width是1000缇,scaleWidth也是1000缇,也就是说他们是1:1的关系,我们用 print.circle (500,500),200在画布上画出来的圆所用的尺寸单位是1:1的,明确一点说就是在画布宽上所画的一缇就是窗体宽度的一缇,但修改了scaleWidth后,比如说是原来值的一半,情况就不一样了,画布跟窗体的比例就变成是1:2了,在画布看来,要用原来数值的一半来表示窗体的宽,那么只能是1个缇来表示窗体width的两个缇了,这样的话如果还是用原来参数来使用print方法来作圆的话,出来的圆就是原来的两倍了。情况就有点像要在一张白张上把整个中国地图画出来一样,张上的一毫米就相当于实际十万八千公里了。这就是scale属性跟窗体width,height之间或关系了。

缇跟像素的关系
我们可以通过VB的系统对像screen的twipPerPixersX及twipPerPixersX属性来返回当前分辨率下每一像素所占缇,默认情况下应该是15。但这个值是不是固定的呢?答案是不的,屏幕也是一个画布,同时也像窗体一样有高和宽,要返回15的前提条件是scaleWidth跟width是1:1,scaleHeight跟height也是1:1。

总结
         窗体上有一个画布,它的坐标系统默认是跟窗体一样的,但可以通过scale类属性可以去修改。通过这些scale类属性我们可以开发出一种具有图形放大缩小功能的程序,只要把作图的方法中参数保持不变,动态改变scale属性就可以达到目的,这种关系是成反比的,也就是说参数不变,scale减小的话图形就放大。这类程序的例子就像是股票分析软件中的成交量图。

         另:DELPHI也有类似的画布机制。原理是基本上一致的。

ps:在vb中感觉真不习惯.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,我会用文回复这篇博客:http://blog.csdn.net/vbcom/article/details/7245186。 这篇博客主要介绍了如何在C#使用Win32 API来实现窗口的拖动和缩放功能。作者首先介绍了Win32 API的概念和作用,然后详细讲解了如何使用API函数来获取窗口的句柄、移动窗口、改变窗口大小等操作。最后,作者还提供了完整的示例代码,方便读者学习和实践。 总的来说,这篇博客对于想要深入了解C#和Win32 API的开发者来说是一篇非常有价值的文章。通过学习这篇博客,读者可以了解到如何使用API函数来实现一些高级的窗口操作,从而提高自己的编程技能。 ### 回答2: 该文章是一篇讲解机器学习基础的入门级文章。文章首先介绍了机器学习的概念和分,分别包括有监督学习、无监督学习、半监督学习和强化学习。其,有监督学习的应用最为广泛,无监督学习是指从数据学习模型并发现数据的结构,半监督学习是指利用已有标注数据再进行学习提高分效果,强化学习则是指学习如何做出一系列行动并获得奖励,从而最大化总体奖励的过程。 接着,文章介绍了机器学习的建模过程,包括数据的准备、选择合适的模型、模型训练和评估。数据准备主要包括数据清洗、数据预处理和特征选择等步骤;选择合适的模型可以根据不同的应用场景和问题来选择;模型训练则是利用训练集训练模型;模型评估则是根据测试集的表现来评估模型的好坏。 最后,文章介绍了机器学习的一些应用领域,包括自然语言处理、计算机视觉、医疗诊断和金融风控等。这些领域都是机器学习所涵盖的应用领域,其,自然语言处理主要应用于机器翻译、语音识别等,计算机视觉主要应用于图像分、目标检测等,医疗诊断主要应用于医学影像分析和病理检测,金融风控主要应用于个人信用评估和反欺诈等方面。 总的来说,该文章讲述了机器学习的基础知识,包括概念、分、建模过程和应用领域等方面,对初学者来说是一篇很好的入门级文章。 ### 回答3: 这篇文章主要讲了作者在学习Cocos2d-x游戏引擎时的一些心得和体会。作者首先介绍了游戏引擎的概念,游戏引擎是一个游戏开发很重要的组成部分,能够大大减少游戏开发时间和精力成本。然后作者介绍了Cocos2d-x的一些特性,Cocos2d-x是一个轻量级的游戏引擎,使用C++语言开发,提供了丰富的API,可以方便地创建2D游戏。 接着,作者介绍了创建一个Cocos2d-x项目的流程,首先在终端使用命令行工具创建一个空项目,然后在Xcode或Android Studio导入该项目。作者还介绍了Cocos2d-x的基本框架,包括场景(Scene)、层(Layer)、精灵(Sprite)等,不同的框架可以组合使用,实现不同的游戏功能。 在讲解完Cocos2d-x基本框架后,作者详细介绍了游戏开发的一些常用功能,如图片和动画的加载与显示、碰撞检测、音效的播放等。并给出了一些实例代码进行说明,让读者更好的理解和掌握。 最后,作者总结了自己在学习Cocos2d-x过程遇到的一些问题和解决方法,如调试技巧、错误处理等。并鼓励读者多花时间去了解和尝试Cocos2d-x,因为这是一个非常实用的工具。 总之,这篇文章是一个很好的介绍Cocos2d-x游戏引擎的文章,对于刚接触这个引擎的人来说,是一个很好的指导。文章内容详细,实用性很强,读者可以通过实例代码和作者的经验总结更好的掌握该引擎的使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值