您的位置:首页 > 编程语言 > VB

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

2016-12-06 19:22 435 查看

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

1 效果图展示





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 LongPublic Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As LongDeclare 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函数可以做很多有趣的东西,大家可以自己动手试一试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息