VB.Net建立不規則表單 一般說來,應用程式的表單都是規則的,即是矩形表單。有時候為了某種特殊的用途,我們希望改變應用程式表單的形狀,比如做個個性十足的mp3播放器,小時鐘等等,這就需要 "定製"我們的應用程式。另外,特殊形狀的表單有時候也能吸引使用者的注意力,使得他們格外注意你的程式。
在VB6裡面,我們一般通過以下代碼來建立不規則表單。
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, _ ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, _ ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Sub Form_Activate()
Dim hndRgn As Long
hndRgn = CreateEllipticRgn(0, 0, 175, 175)
Call SetWindowRgn(Me.hWnd, hndRgn, True)
Call DeleteObject(hndRgn)
End Sub
首先用Win32 API CreateEllipticRgn建立一個圓形的地區,然後設定Form的地區為使用者自訂的Region,這樣我們就可以得到下面一個圓形的表單為了更美觀一點,我們可以設Form的BorderStyle為None,然後自己畫一個TitileBar,就可以做成比較活潑的應用程式。
VB.Net裡面如何?以上效果:
VB.NET是一中跨平台的語言,更好的利用了物件導向機制。它的物件導向能力擴充了語言本身的通路:一切都是對象。這意味著比在以前的VB版本裡,你獲得了更多的內在功能,你將很少被迫使用 Windows API。因此在VB.Net裡面我們也只好放棄VB6裡面利用API的觀念,用VB.Net強大的對象機制來闡述以上話題。
在VB.Net裡面,Form有一個Reigin屬性,我們通過建立自訂的Reigin,然後指定Form的Reigin,就可以得到不規則的表單。而且VB.Net裡面的Reigin對象功能強大,遠超過了之前VB的限制,因此我們可以作出很多漂亮的介面。
Regin對象
System.Drawing的一個對象,指示由矩形和由路徑構成的圖形形狀的內部。因為地區的座標是在全域座標中指定的,所以可對它進行縮放。然而,在繪製表面上,它的內部取決於表示它的像素的大小和形狀。應用程式可以使用若干地區來堆砌繪圖操作的輸出。視窗管理器則使用地區來定義視窗的繪製地區。這些地區被稱為剪輯地區。應用程式還可以在命中檢測的操作中使用地區,例如檢查一個點或矩形是否與某個地區相交。應用程式可通過使用 Brush 對象來填充一個地區。
GraphicsPath表示一系列相互串連的直線和曲線,應用程式使用路徑來繪製形狀的輪廓、填充形狀內部和建立剪輯地區。圖形引擎在全域座標空間中維護路徑內的幾何形狀的座標。路徑可由任意數目的圖形(子路徑)組成。每一圖形都是由一系列相互串連的直線和曲線或幾何形狀基元構成的。圖形的起始點是相互串連的一系列直線和曲線中的第一點。終結點是該序列中的最後一點。幾何形狀基元的起始點和終結點都是由基元規範定義的。
下面我們看兩個具體的執行個體
1.文字格式的表單在Form的Load事件加入以下代碼:
Dim text_path As GraphicsPath
Dim text_region As Region
Me.BackColor = Color.Red
Me.Width = 600
' Create the text path.
text_path = New GraphicsPath( Drawing.Drawing2D.FillMode.Alternate)
text_path.AddString("CSDN", New FontFamily("Times New Roman"), FontStyle.Bold, 200,New Point(10, 10),
StringFormat.GenericDefault)
' Create a Region from the path.
text_region = New Region(text_path)
' Constrain the form to the region.
Me.Region = text_region運行將將得到如下形狀的表單,記住按Shift+F5 中止程式。
2.橢圓形狀的表單:
同樣加入以下代碼,得到如下表單Me.Width = 300
Me.Height = 220
Me.BackColor = Color.RoyalBlue
Dim m_path As GraphicsPath
m_path = New GraphicsPath(FillMode.Winding)
m_path.AddEllipse(1, 1, 200, 200)
Dim m_region As New Region(m_path)
Me.Region = m_region以上只是兩個簡單的例子,通過利用Region和GraphicsPath對象,你將得到更多有趣的效果。