VB窗体半透明的方法

‘-----------------------------
‘使用说明:
‘1.新建一个标准exe工程
‘2.放置1个CommandButton 控件(使用默认名)
‘3.把下面的代码复制进去就可以了
‘-----------------------------
Option Explicit

‘Transparancy API‘s
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Declare Function UpdateLayeredWindow Lib "user32" (ByVal hWnd As Long, ByVal hdcDst As Long, pptDst As Any, psize As Any, ByVal hdcSrc As Long, pptSrc As Any, crKey As Long, ByVal pblend As Long, ByVal dwFlags As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Const GWL_EXSTYLE = (-20)
Private Const LWA_COLORKEY = &H1
Private Const LWA_ALPHA = &H2
Private Const ULW_COLORKEY = &H1
Private Const ULW_ALPHA = &H2
Private Const ULW_OPAQUE = &H4
Private Const WS_EX_LAYERED = &H80000

Public Function isTransparent(ByVal hWnd As Long) As Boolean
On Error Resume Next
Dim Msg As Long
Msg = GetWindowLong(hWnd, GWL_EXSTYLE)
If (Msg And WS_EX_LAYERED) = WS_EX_LAYERED Then
isTransparent = True
Else
isTransparent = False
End If
If Err Then
isTransparent = False
End If
End Function

Public Function MakeTransparent(ByVal hWnd As Long, ByVal Perc As Integer) As Long
Dim Msg As Long
On Error Resume Next

Perc = 100
If Perc < 0 Or Perc > 255 Then
MakeTransparent = 1
Else
Msg = GetWindowLong(hWnd, GWL_EXSTYLE)
Msg = Msg Or WS_EX_LAYERED
SetWindowLong hWnd, GWL_EXSTYLE, Msg
SetLayeredWindowAttributes hWnd, 0, Perc, LWA_ALPHA
MakeTransparent = 0
End If
If Err Then
MakeTransparent = 2
End If
End Function

Public Function MakeOpaque(ByVal hWnd As Long) As Long
Dim Msg As Long
On Error Resume Next
Msg = GetWindowLong(hWnd, GWL_EXSTYLE)
Msg = Msg And Not WS_EX_LAYERED
SetWindowLong hWnd, GWL_EXSTYLE, Msg
SetLayeredWindowAttributes hWnd, 0, 0, LWA_ALPHA
MakeOpaque = 0
If Err Then
MakeOpaque = 2
End If
End Function
‘透明
Private Sub Command1_Click()
 MakeTransparent Me.hWnd, 120 ‘这里的120是透明度,在0~255之间取值
End Sub

  

时间: 2024-08-05 23:14:56

VB窗体半透明的方法的相关文章

C# 窗体间传值方法大汇总

第一种方法:创建一个类,里面声明用于存储接收的字段.传的时候存储于字段中,要用的时候,直接类名.字段名 进行调用.(这种方法传递是双向的) 第二种方法:1.在Form1里定义 public string Name = "*****" 2. 在Form2里创建Form1对象, Form1 f = new Form1(); 然后就可以通过f.Name取值了 第三种方法:用构造函数在窗体Form2中 int value1; string value2; public Form2 ( int 

Delphi7 实现窗体全屏方法

设置要全屏的窗体的ALign 属性为ALcLient ,此法最快.当然对我来说,我并不知道这个,所以走了远路,等后来在实现窗体禁止移动的时候才想到了这里,汗.注意:这种全屏方式不会挡了系统的任务栏....同时可以防止窗体移动, 方法二: 用代码控制.在窗体的创建事件中,此方法运行后窗体也可以移动.影响美观.应该再加入禁止窗体移动的代码)写入 var TrayWnd: HWnd; // 任务栏句柄 Rec : TRect; begin TrayWnd := FindWindow('Shell_Tr

crm2011窗体上下文对象方法

//返回用来访问应用程序的基 URL Xrm.Page.context.getClientUrl(); //返回一个字符串,表示当前Microsoft Office Outlook由用户选择的主题 Xrm.Page.context.getCurrentTheme(); //返回表示的 LCID 值Microsoft Dynamics CRM是组织的基本语言的语言包 Xrm.Page.context.getOrgLcid(); //返回的组织名称的唯一性文本值 Xrm.Page.context.g

c# winform窗体闪烁解决方法

在主窗体中任意位置加上下面的代码即可 protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } } c# winform窗体闪烁解决方法

C# 窗体间传值方法大汇总(转)

第一种方法:创建一个类,里面声明用于存储接收的字段.传的时候存储于字段中,要用的时候,直接类名.字段名 进行调用.(这种方法传递是双向的) 第二种方法:1.在Form1里定义 public string Name = "*****" 2. 在Form2里创建Form1对象, Form1 f = new Form1(); 然后就可以通过f.Name取值了 第三种方法:用构造函数在窗体Form2中 int value1; string value2; public Form2 ( int 

C#中实现VB中的CreateObject方法

经常看到有些VB的例子中直接用个CreateObject就可调用系统功能(大多是COM对象),像用户设定,网络设定等等.虽然C#中可以通过使用VB的命名空间的方法来调用CreateObject函数,但是这样比较没什么用,因为生成的对象的所带有的方法都不能使用.C#中还可以直接用添加引用的方式来调用一些对象,前提是你知道该添加哪个引用.当我上网搜索,已经搜索到很多VB的成功用CreateObject调用的例子,C#的例子却很难找到的时候,就干脆用类似VB的方法算了,很简单.免得继续在网络中大海捞针

c#窗体的传值方法

了解了窗体的显示相关知识,接着总结一下窗体的传值方法:  1.通过构造函数  特点:传值是单向的(不可以互相传值),实现简单 实现代码如下: 在窗体Form2中         int value1; string value2;  public Form2 ( int value1 , string value2 ) {      InitializeComponent ( );      this.value1 = value1;      this.value2 = value2; } 

子窗体中如何调用父窗体里的方法

有两个窗体,一个子窗体,一个父窗体,当点击父窗体中的按钮,弹出子窗体,在子窗体中添加完数据,单击确定按钮后,数据在父窗体的数据显示控件中立即显示,实现其实很简单,同时方法也很多,我是利用了一种最简单的方法. 子窗体SubForm:protected void btnOk_Click(object sender,EventArgs arg){   //插入数据的代码   if(插入数据成功)      this.DialogResult=DialogResult.Ok;} 父窗体:protecte

C#关于多线程之线程中打开并调用窗体内的方法实例

第一步:如何在线程中打开窗体 SendEmailProgress progress=new SendEmailProgress(); //添加窗体关闭事件 progress.Closing += (s, ev) => { if (progress.IsEnabledCloseForm) { } else { ev.Cancel = true;//关闭窗体 } }; Control.CheckForIllegalCrossThreadCalls = false; //在这个类中我们不检查跨线程的调