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函数可以做很多有趣的东西,大家可以自己动手试一试。
相关文章推荐
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- VB简单实现窗口全透明
- 自绘实现半透明水晶按钮(继承CButton,设置BS_OWNERDRAW风格,覆盖DrawItem函数绘制按钮,把父窗口的背景复制到按钮上,实现视觉上的透明,最后通过AlphaBlend实现半透明)
- VB实现半透明或者部分透明窗体
- CreateRectRgn和CombineRgn函数
- CreateRectRgn和CombineRgn函数
- VC如何实现透明窗口
- VB.net实现窗口启动时的自动隐藏
- C++Builder/Delphi中透明Panel及透明窗口的实现方法
- WINDOWS上的透明窗口实现
- 通过 WebSphere Application Server V6 实现 Web 服务安全——第 5 部分
- Delphi 如何实现窗口透明,但是窗口上的文字不透明
- 在win2000下实现透明窗口
- C++Builder/Delphi中透明Panel及透明窗口的实现方法
- vb 6 listview的背景透明的实现
- 实现窗口从实变透明到消失这是一个例子
- SWT实现窗口始终最前以及透明窗口
- VB中MSN弹出式窗口的完美实现