VB.Net 如何設定 視窗標題列 Title bar 顏色
如何設定 視窗標題列 Title bar 顏色
Public Class Form1
' API 宣告
Private Declare Function SetSysColors Lib "user32" _
(ByVal nChanges As Integer, _
ByRef lpSysColor As Integer, _
ByRef lpColorValues As Integer) As Integer
Private Declare Function GetSysColor Lib "user32" _
(ByVal nIndex As Integer) As Integer
' SetSysColors API 是用來設定視窗元素的顯示顏色
' GetSysColors API 是用來取得視窗元素的顯示顏色
' 自訂列舉值, 視窗介面的顯示元素
Private Enum DisplayElement
Scrollbar = 0
Background = 1
ActiveCaption = 2
InactiveCaption = 3
Menu = 4
Window = 5
WindowFrame = 6
MenuText = 7
WindowText = 8
CaptionText = 9
ActiveBorder = 10
InactiveBorder = 11
AppWorkspace = 12
Highlight = 13
HighlightText = 14
BtnFace = 15
BtnShadow = 16
GrayText = 17
BtnText = 18
InactiveCaptionText = 19
BtnHighlight = 20
DkShadow3D = 21
Light3D = 22
InfoText = 23
InfoBk = 24
GradientActiveCaption = 27
GradientInactiveCaption = 28
End Enum
Private Sub Button1_Click(ByVal s As Object, ByVal e As EventArgs) Handles Button1.Click
' 改變視窗標題列顏色為藍色
If Set_Color(DisplayElement.ActiveCaption, Color.Blue) Then Debug.WriteLine("OK!")
' 改變視窗標題列漸層顏色為綠色
If Set_Color(DisplayElement.GradientActiveCaption, Color.Green) Then Debug.WriteLine("OK!")
' 取得視窗標題列顏色
Debug.WriteLine(ColorTranslator.FromOle(GetSysColor(DisplayElement.ActiveCaption)).ToString)
' 取得視窗標題列漸層顏色
Debug.WriteLine(ColorTranslator.FromWin32(GetSysColor(DisplayElement.GradientActiveCaption)).ToString)
' 也可以使用陣列一次處理多項設定, 如:
' 陣列中指定標題列顏色跟漸層顏色項目
Dim objElement() As Integer = {DisplayElement.ActiveCaption, DisplayElement.GradientActiveCaption}
' 陣列中指定紅色及黃色
Dim objColor() As Integer = {ColorTranslator.ToOle(Color.Red), ColorTranslator.ToOle(Color.Yellow)}
' 呼叫API 一次設定2 項
If SetSysColors(2, objElement(0), objColor(0)) Then MessageBox.Show("Change OK!")
End Sub
' 設定視窗元素屬性
Private Function Set_Color(ByVal Element As Short, ByVal NewColor As Color) As Boolean
Return SetSysColors(1, Element, ColorTranslator.ToOle(NewColor))
' 或
' Return SetSysColors(1, Element, ColorTranslator.ToWin32(NewColor))
End Function
End Class
' ColorTranslator 類別
' ToOle 方法 : 將指定的 Color 結構轉換為 OLE 色彩。
' ToWin32 方法 : 將指定的 Color 結構轉換為 Windows 色彩。
' FromOle 方法 : 將 OLE 色彩值轉換為 GDI+ Color 結構。
' FromWin32 方法 : 將 Windows 色彩值轉換為 GDI+ Color 結構。
注意 : SetSysColors API 是將 Windows 的 "視窗外觀" 的顯示設定做 "改變" ,
因此 , 一改就所是有程式的表單都更動囉 !