用VB制作平面按钮 张胜 2001年 46期 经常看到现在许多软件中都使用了平面按钮,即美化了软件的界面,又不乏实用价值,感觉挺不错。其实,在VB中可以简单地制作这类按钮,那么,我们就用VB“堆叠”一个平面按钮吧。   在VB的控件Microsoft Windows Common Controls 6.0中StatuBar可以是平面、凸起、凹下三种状态,可以显示文字和小图片,并可根据你的需要调整它们的位置,我们可以通过检测鼠标位置来改变它的不同的外观──鼠标光标不在按钮区时显示平面状态;鼠标光标在按钮区时显示凸起状态;鼠标按下时显示凹下状态。好,现在我们开始。(^46020504a^)   新建一工程,在窗体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的第一个窗格(^46020504b^)   .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环境下调试通过。