VB通过windows API实现窗口透明,部分透明,CreateRectRgn,CombineRgn
来源:互联网 发布:pop ssl 端口 编辑:程序博客网 时间:2024/04/28 07:21
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 ExplicitPublic 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 LongPublic Const RGN_MODE = 4 'XOR 异或
新建一个窗体,放两个按钮,改名为CmdHide,CmdQuit,然后把下面代码复制上就行了
Option ExplicitPrivate Sub Form_Load() Me.Width = 6735 Me.Height = 5175 Me.ScaleMode = vbPixels CmdHide.Move 160, 96, 73, 41 CmdQuit.Move 232, 96, 73, 41End SubPrivate Sub CmdQuit_Click() EndEnd SubPrivate 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, TrueEnd Sub
利用这些API函数可以做很多有趣的东西,大家可以自己动手试一试。
0 0
- VB通过windows API实现窗口透明,部分透明,CreateRectRgn,CombineRgn
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- Windows API一日一练(40)CreateRectRgn和CombineRgn函数
- VB简单实现窗口全透明
- spring基础知识整理
- springMVC学习笔记(四) ---- 跳转方式
- 平方之哈希表
- c# 无法加载DLL“xxxx”:找不到指定的模块(异常来自HRESULT:0X8007007E)的一个解决方法
- STM32中断的配置
- VB通过windows API实现窗口透明,部分透明,CreateRectRgn,CombineRgn
- VS2005转换成VS2010出错
- 控制摄像机围绕目标旋转观察
- xtraBackup 备份mysql
- ASP .NET My97DatePicker
- 创建型设计模式_02--抽象工厂模式
- LogUtil日志工具
- Telling INIT to go to single user mode. init: rc main
- Java基础----反射