用VB制作平面按钮

经常看到现在许多软件中都使用了平面按钮,即美化了软件的界面,又不乏实用价值,感觉挺不错。其实,在VB中可以简单地制作这类按钮,那么,我们就用VB“堆叠”一个平面按钮吧。
   在VB的控件Microsoft Windows Common Controls 6.0中StatuBar可以是平面、凸起、凹下三种状态,可以显示文字和小图片,并可根据你的需要调整它们的位置,我们可以通过检测鼠标位置来改变它的不同的外观──鼠标光标不在按钮区时显示平面状态;鼠标光标在按钮区时显示凸起状态;鼠标按下时显示凹下状态。好,现在我们开始。((图1)

图1
图1

   新建一工程,在窗体Form1中添加以下控件:
   在窗体代码区添入以下代码:
   Option Explicit
   '鼠标信息的API函数定义
   Private Declare Function ScreenToClient Lib “user32” (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
   Private Declare Function GetCursorPos Lib “user32” (lpPoint As POINTAPI) As Long
   '鼠标指针类型定义
   Private Type POINTAPI
   x As Long
   y As Long
   End Type
   Dim Pnt As POINTAPI '用于记录鼠标位置的全局变量
   Private Sub Form_Load()
   With StatusBar1
   '常规状态下为平面
   .Panels(1).Bevel = sbrNoBevel
   .Panels(1).Text = “平面按钮”
   '字及图片的显示位置:sbrLeft图左字左;sbrCenter图左字中;sbrRight图右字右
   .Panels(1).Alignment = sbrCenter
   '装入常规状态下的按钮图标
   .Panels(1).Picture = ImageList1.ListImages(1).Picture
   '使StatusBar添满容器Picture
   .Width = Picture1.Width
   .Height = Picture1.Height + 30
   .Top = -30 '消除上方的“边”
   .Left = 0
   '只使用StatusBar的第一个窗格((图2)
图2
图2

   .Panels(1).Width = .Width
   End With
   End Sub
   Private Sub StatusBar1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
   '装入在鼠标按下时的图标并显示为凹下的状态
   StatusBar1.Panels(1).Picture = ImageList1.ListImages(3).Picture
   StatusBar1.Panels(1).Bevel = sbrInset
   Timer1.Enabled = False '关闭鼠标位置检测
   End Sub
   Private Sub StatusBar1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
   '当鼠标首次移入按钮区时,开启鼠标位置检测
   If StatusBar1.Panels(1).Bevel = sbrNoBevel Then Timer1.Enabled = True
   End Sub
   Private Sub StatusBar1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
   '恢复按钮图标并显示为凸起的状态
   StatusBar1.Panels(1).Picture = ImageList1.ListImages(2).Picture
   StatusBar1.Panels(1).Bevel = sbrRaised
   Timer1.Enabled = True
   End Sub
   Private Sub Timer1_Timer()
   GetCursorPos Pnt '得到当前鼠标位置
   ScreenToClient Picture1.hwnd, Pnt '转化成相对Picture的相对位置
   With StatusBar1
   '对鼠标位置是否在按钮区进行检测
   If Pnt.x < Picture1.ScaleLeft Or Pnt.y < Picture1.ScaleTop Or Pnt.x > Picture1.ScaleLeft + Picture1.Width /15 Or Pnt.y > Picture1.ScaleTop + Picture1.Height /15 Then
   '鼠标离开时恢复按钮状态并关闭检测
   .Panels(1).Picture = ImageList1.ListImages(1).Picture
   .Panels(1).Bevel = sbrNoBevel
   Timer1.Enabled = False
   Else
   '装入在鼠标移入时的图标并显示为凸起的状态
   .Panels(1).Picture = ImageList1.ListImages(2).Picture
   .Panels(1).Bevel = sbrRaised
   End If
   End With
   End Sub
   程序到此为止,有兴趣的朋友不妨将此写成自己的控件,以后就可以将它当成按钮单独使用了。以上代码在Windows Me/VB 6.0环境下调试通过。