VB.NET坐標系統(tǒng)相關概念總結
VB.NET是一款比較常用的編程語言。其功能的強大性極大的吸引了開發(fā)人員的眼球。其中也有很多特殊的功能值得我們去深入的研究。比如VB.NET坐標系統(tǒng)就是其中一個。下面就為大家詳細介紹這一相關概念。#t#
這里我們來看一下ScaleLeft/Top/Height/Width ScaleX ScaleY TextHeight TextWidth的一些特性與關連。
所謂的ScaleLeft ScaleTop ScaleTop ScaleWidth指的是Window中的Client Area即可以畫圖、放元件的區(qū)域,像Title區(qū)就不在Client Area的范圍。如果我們設定ScaleMode成不為0的數(shù)值,如設定ScaleMode = 3 (VBPixels)那麼就代表這區(qū)域的度量是以Pixels為單位,而ScaleTop =ScaleLeft = 0,即原點在左上角。
VB.NET坐標系統(tǒng)提供了一個很好用的座標系統(tǒng)轉換,即ScaleMode, ScaleLeft ScaleTop ScaleTopScaleWidth.我個人不喜歡VB內定的ScaleMode = VbTwips,我愛 ScaleMode=VBPixels原因是Window系統(tǒng)的度量單位是使用Pixels而不是Twips.
如果我們想在一個畫面上畫上座標,那麼如何才能不管Window的大小,而只管我們所關注的座標呢?假設我們想做一個座標,原點在Form的左下角(0,0)而右上角座標是(100,100), 那我們只要對Form如此設制
- ScaleTop = 100
- ScaleWidth = 100
- ScaleLeft = 0
- ScaleHeight = -100
那就成了,這時候,如果我們去查一下VB.NET坐標系統(tǒng)中Form的MouseDown的X, Y值,會發(fā)現(xiàn)它的值已變成落在0-100之間了。(此時的ScaleMode = 自動變Vbuser)更有趣的是用來計算字串高、寬的TextHeight/TextWidth也變成以座標0-100的方式來表現(xiàn)了。
例如說,
。CurrentX = 10
。CurrentY = 10
Form1.Print "HaHa"
這時會見到於Form左下方會出現(xiàn)HaHa,它的位置便是於座標(10,10)之處,所以了,如果Form變大,F(xiàn)orm1.Print "HaHa"所顯示之位置也會自動更動不像其他的ScaleMode(如vbPixel),會在固定的絕對單位處顯示"HaHa".然而,有時候我們會想要以絕對單位來做一些事,例如:我們希望在左邊算來第三個Pixels處來顯示東西,的確,數(shù)學好的人可以自己轉換,而像我數(shù)學不好的人,可以用ScaleX/ScaleY來做,像方才的例子,左邊算來第三點(Pixels)相對應於新的座標的寬度便是Form1.ScaleX(3,vbPixels, vbUser)。
再來一個有趣的問題,如果有人見過一篇文章,用API來任意角度旋轉字型,那篇文章中字型旋轉之後印在Form上,如果我們轉90度,而且於(50,50)處印字,會發(fā)現(xiàn)它是從(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為單位。
- With Form1
- OldScaleLeft = .ScaleLeft
- OldScaleTop = .ScaleTop
- OldScaleWidth = .ScaleWidth
- OldScaleHeight = .ScaleHeight
- OldScaleMode = .ScaleMode
- 。ScaleMode = vbPixels
- txtLen = .TextWidth(mystring)
'myString是待旋轉的字串- if OldScaleMode <> vbUser then
- 。ScaleMode = oldScaleMode
- else
- 。ScaleLeft = OldScaleLeft
- 。ScaleTop = OldScaleTop
- 。ScaleWidth = OldScaleWidth
- 。ScaleHeight = OldScaleHeight
- End If
- txtHeight = .ScaleY
(txtLen,vbPixels, vbUser)- End With
如此txtHeight便是字串於旋轉後的高度啦!以上就是我們對VB.NET坐標系統(tǒng)的詳細介紹。