如何使得仅让窗体边框透明,但鼠标移到边框上,边框就会出现(microsoft windows media player9 的方式) 使用GetWindowLong,SetWindowLong可以实现吗?

解决方案 »

  1.   

    '窗体背景图片为256色gif
    Public Sub SetWindowShape(hWnd As Long, Picture As Long, Optional TransColor As Byte = 1)
    '设置窗体皮肤
        On Error Resume Next
        Dim bmByte() As Byte
        Dim X As Long, Y As Long
        Dim Rgn1 As Long, Rgn2 As Long
        Dim SPos As Long, EPos As Long
        Dim bm As BITMAP, R As RECT
        Dim WID As Long, HEI As Long
        '获取窗体背景图片尺寸
        GetObjectAPI Picture, Len(bm), bm
        WID = bm.bmWidth
        HEI = bm.bmHeight
        ReDim bmByte(0 To WID, 0 To HEI)
        GetWindowRect hWnd, R
        R.Right = R.Left + WID
        R.Bottom = R.Top + HEI
        MoveWindow hWnd, R.Left, R.Top, R.Right, R.Bottom, 1
        GetBitmapBits Picture, WID * HEI, bmByte(0, 0)  '获取图像数组
        If TransColor = vbNull Then TransColor = bmByte(0, 0)
        Rgn1 = CreateRectRgn(0, 0, WID, HEI)
        SetWindowRgn hWnd, Rgn1, True  '设定窗体形状区域
        Rgn1 = CreateRectRgn(0, 0, 0, 0)
        For Y = 0 To HEI - 1 '逐行扫描
            For X = 0 To WID - 1
                If bmByte(X, Y) <> TransColor Then
                    Rgn2 = CreateRectRgn((X + 1) - 1, (Y + 1) - 1, (X + 1), (Y + 1))
                    CombineRgn Rgn1, Rgn1, Rgn2, 2
                    DeleteObject Rgn2
                End If
            Next X
        Next Y
        SetWindowRgn hWnd, Rgn1, True  '设定窗体形状区域
        DeleteObject Rgn1
    End Sub
    '判断鼠标移到标题上时再用别一图片