可以使用VB中的ActiveX Control来打造自己满意的按钮 要求:熟悉ActiveX Control的编程以上仅提供一个方向,给不给分无所谓!

解决方案 »

  1.   

    形状不规则的窗体这也是使用Region的观念,设定一个Region的范围,而後使用SetWindowRgn API,
    这将使得该Window显示的范围只有在该Region之内,之外的区域全然没有办法显示请先查Mouse是否处於不规则区域内'需一个Command Button
    Option Explicit
    Const ALTERNATE = 1
    Const WINDING = 2Private Type POINTAPI
    X As Long
    Y As Long
    End TypePrivate Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
    Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As LongPrivate hRegion As LongPrivate Sub Command1_Click()
    Unload Me
    End SubPrivate Sub Form_Load()
        Dim p(9) As POINTAPI
        p(0).X = 135: p(0).Y = 66
        p(1).X = 121: p(1).Y = 107
        p(2).X = 80: p(2).Y = 107
        p(3).X = 111: p(3).Y = 132
        p(4).X = 97: p(4).Y = 175
        p(5).X = 135: p(5).Y = 149
        p(6).X = 172: p(6).Y = 175
        p(7).X = 158: p(7).Y = 132
        p(8).X = 190: p(8).Y = 107
        p(9).X = 149: p(9).Y = 107
        hRegion = CreatePolygonRgn(p(0), 10, ALTERNATE)
        Me.Picture = LoadPicture("c:\windows\setup.bmp")
        Me.ScaleMode = 3
        Me.Move ScaleX(80, vbPixels, vbTwips), ScaleX(66, vbPixels, vbTwips), _
    ScaleX(200, vbPixels, vbTwips), ScaleX(180, vbPixels, vbTwips)
        Command1.Move 110, 80, 40, 40
        Command1.Caption = "Exit"
        Call SetWindowRgn(Me.hWnd, hRegion, True)
    End Sub
      

  2.   

    一个按钮一般制作2张图片:有热点一张,非热点一张.把图片编号,放在资源文件中,在MouseMove事件中用LoadResPicture来取.
    如:
    Image按钮(Index).Picture = LoadResPicture(100 + Index * 10 + 1, 0)