VB.NET坐标系统相关概念总结
创始人
2024-06-20 20:30:33
0

VB.NET是一款比较常用的编程语言。其功能的强大性极大的吸引了开发人员的眼球。其中也有很多特殊的功能值得我们去深入的研究。比如VB.NET坐标系统就是其中一个。下面就为大家详细介绍这一相关概念。#t#

这里我们来看一下ScaleLeft/Top/Height/Width ScaleX ScaleY TextHeight TextWidth的一些特性与关连。

所谓的ScaleLeft ScaleTop ScaleTop ScaleWidth指的是Window中的Client Area即可以画图、放元件的区域,像Title区就不在Client Area的范围。如果我们设定ScaleMode成不为0的数值,如设定ScaleMode = 3 (VBPixels)那麽就代表这区域的度量是以Pixels为单位,而ScaleTop =ScaleLeft = 0,即原点在左上角。

VB.NET坐标系统提供了一个很好用的座标系统转换,即ScaleMode, ScaleLeft ScaleTop ScaleTopScaleWidth.我个人不喜欢VB内定的ScaleMode = VbTwips,我爱 ScaleMode=VBPixels原因是Window系统的度量单位是使用Pixels而不是Twips.

如果我们想在一个画面上画上座标,那麽如何才能不管Window的大小,而只管我们所关注的座标呢?假设我们想做一个座标,原点在Form的左下角(0,0)而右上角座标是(100,100), 那我们只要对Form如此设制

 

  1. ScaleTop = 100 
  2. ScaleWidth = 100 
  3. ScaleLeft = 0 
  4. ScaleHeight = -100

 

那就成了,这时候,如果我们去查一下VB.NET坐标系统中Form的MouseDown的X, Y值,会发现它的值已变成落在0-100之间了。(此时的ScaleMode = 自动变Vbuser)更有趣的是用来计算字串高、宽的TextHeight/TextWidth也变成以座标0-100的方式来表现了。

例如说,

。CurrentX = 10

。CurrentY = 10

Form1.Print "HaHa"

这时会见到於Form左下方会出现HaHa,它的位置便是於座标(10,10)之处,所以了,如果Form变大,Form1.Print "HaHa"所显示之位置也会自动更动不像其他的ScaleMode(如vbPixel),会在固定的绝对单位处显示"HaHa".然而,有时候我们会想要以绝对单位来做一些事,例如:我们希望在左边算来第三个Pixels处来显示东西,的确,数学好的人可以自己转换,而像我数学不好的人,可以用ScaleX/ScaleY来做,像方才的例子,左边算来第三点(Pixels)相对应於新的座标的宽度便是Form1.ScaleX(3,vbPixels, vbUser)。

再来一个有趣的问题,如果有人见过一篇文章,用API来任意角度旋转字型,那篇文章中字型旋转之後印在Form上,如果我们转90度,而且於(50,50)处印字,会发现它是从(50,50)处往萤幕上方写出字,如果我们想在座标(50,50)处当作字串的结束之地,那该如何呢,我会计算出该字串的长度(例如:长度20),而後在(50,70)处印字,那困难点变成如何得知该字串长度,第一个反应是。

TextWidth,不过别忘了,TextWidth它随着ScaleMode的更动而变,宽度x1者,如果垂直Print,而便假设其高度也是x1是不对的(如:ScaleTop = 0, ScaleHeight = 10, ScaleLeft = 0, ScaleWidth=20,而宽度=10的字串,垂直印的高度应是不会是10,若X Y轴单位不同时也不一定是5(如果字大小不变的话)。

那使用Pixels来做二者的转换,Pixels一个点便是一个点,所以X,Y轴的单位是相同的,当然,使用Twips也可以,只是如果中间有用上API,人家大多以Pixels为单位。

 

  1. With Form1  
  2. OldScaleLeft = .ScaleLeft  
  3. OldScaleTop = .ScaleTop  
  4. OldScaleWidth = .ScaleWidth  
  5. OldScaleHeight = .ScaleHeight  
  6. OldScaleMode = .ScaleMode  
  7. 。ScaleMode = vbPixels 
  8. txtLen = .TextWidth(mystring) 
    'myString是待旋转的字串  
  9. if OldScaleMode <> vbUser then  
  10. 。ScaleMode = oldScaleMode 
  11. else  
  12. 。ScaleLeft = OldScaleLeft 
  13. 。ScaleTop = OldScaleTop 
  14. 。ScaleWidth = OldScaleWidth 
  15. 。ScaleHeight = OldScaleHeight 
  16. End If  
  17. txtHeight = .ScaleY
    (txtLen,vbPixels, vbUser)  
  18. End With 

 

如此txtHeight便是字串於旋转後的高度啦!以上就是我们对VB.NET坐标系统的详细介绍。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...