VB通过windows API实现窗口透明,部分透明,CreateRectRgn,CombineRgn

VB通过windows API实现窗口透明,部分透明

1 效果图展示

VB通过windows API实现窗口透明,部分透明,CreateRectRgn,CombineRgn_第1张图片
VB通过windows API实现窗口透明,部分透明,CreateRectRgn,CombineRgn_第2张图片

2 相关API函数介绍

Public Declare Function CreateRectRgn Lib "gdi32" (ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Long

创建一个由点(x1,y1)到(x2,y2)的矩形区域,不用时要用DeleteObject函数删除该区域

Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long

将两个区域组合为一个新区域,参数nCombineMode为组合两区域的方法。可设置为如下常数

nCombineMode=1 ‘RGN_AND

nCombineMode=2 ‘RGN_COPY

nCombineMode=3 ‘RGN_DIFF

nCombineMode=4 ‘RGN_XOR

这里为了使窗口透明,我们使用异或运算,令nCombineMode=4

Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long

设置一个窗口的区域

3 VB实例

新建一个模块,复制以下代码

Option Explicit

Public Declare Function CreateRectRgn Lib "gdi32" (ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Long '矩形
Public Declare Function CreateEllipticRgn Lib "gdi32" (ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Long '椭圆形
Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Const RGN_MODE = 4 'XOR 异或

新建一个窗体,放两个按钮,改名为CmdHide,CmdQuit,然后把下面代码复制上就行了

Option Explicit

Private Sub Form_Load()

    Me.Width = 6735
    Me.Height = 5175
    Me.ScaleMode = vbPixels
    CmdHide.Move 160, 96, 73, 41
    CmdQuit.Move 232, 96, 73, 41

End Sub


Private Sub CmdQuit_Click()
    End
End Sub


Private Sub CmdHide_Click()

    CmdHide.Enabled = True
    CmdHide.Enabled = False
    Dim a, b, c As Long
    a = CreateRectRgn(0, 0, Me.Width, Me.Height)
    c = CreateRectRgn(0, 0, 0, 0)
    '上面的消掉
    b = CreateRectRgn(0, 0, Me.Width, CmdHide.Top + 24)
    CombineRgn c, a, b, RGN_MODE
    '左边消掉
    a = c
    b = CreateRectRgn(0, CmdHide.Top + 24, CmdHide.Left, CmdHide.Top + 24 + CmdHide.Height)
    CombineRgn c, a, b, RGN_MODE
    '右边消掉
    a = c
    b = CreateRectRgn(CmdQuit.Left + CmdQuit.Width, CmdQuit.Top + 24, Me.Width, CmdQuit.Top + 24 + CmdQuit.Height)
    CombineRgn c, a, b, RGN_MODE
    '下边消掉
    a = c
    b = CreateRectRgn(0, CmdHide.Top + 24 + CmdHide.Height, Me.Width, Me.Height)
    CombineRgn c, a, b, RGN_MODE
    '完成,设置窗体
    SetWindowRgn Me.hWnd, c, True

End Sub

利用这些API函数可以做很多有趣的东西,大家可以自己动手试一试。

你可能感兴趣的:(VB6,VB,透明,CreateRect,CombineRgn,Rgn)