VB API 之 透明窗体创建

  首先我们要用到的API函数有SetWindowLong,GetWindowLong,SetLayeredWindowAttributes。

SetWindowLong函数原型:

Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) _
As Long

函数功能:

  该函数用来改变指定窗口的属性

参数:

hwnd: Long     //窗口的句柄

nIndex:Long   //大于等于0的偏移值。可以是以下指定的值:


常量
常量值
意义

GWL_EXSTYLE
-20
设定一个新的扩展风格。

GWL_HINSTANCE
-6
设置一个新的应用程序实例句柄。

GWL_ID
-12
设置一个新的窗口标识符。

GWL_STYLE
-16
设定一个新的窗口风格。

GWL_USERDATA
-21
设置与窗口有关的32位值。每个窗口均有一个由创建该窗口的应用程序使用的32位值。

GWL_WNDPROC
-4
为窗口过程设定一个新的地址。
GWL_HWNDPARENT -8   改变子窗口的父窗口,应使用SetParent函数。

当hWnd参数标识了一个对话框时,也可使用下列值:


常量
常量值
意义

DWL_DLGPROC
DWLP_MSGRESULT + sizeof(LRESULT)
设置对话框过程的新地址。

DWL_MSGRESULT
0
设置在对话框过程中处理的消息的返回值。

DWL_USER
DWLP_DLGPROC + sizeof(DLGPROC)
设置的应用程序私有的新的额外信息,例如一个句柄或指针。

dwNewLong

指定的替换值。

dwNewLong中可以使用以下一些列表控件的专用风格:

LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT

这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:

大图标显示,小图标显示,列表显示,详细报表显示

LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。

LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点

LVS_SINGLESEL 同时只能选中列表中一项

返回值:成功返回一个32位整数的值,失败为0.

  

  GetWindowLong函数原型

Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long) _
As Long

函数功能:

  该函数获得指定窗口的有关信息,函数也获得在额外窗口内存中指定偏移位地址的32位度整型值。

参数:

hWnd :Long  //窗口的句柄

nIndex:Long //大于等于0的偏移值。可以是以下值:

一:


  
意义
  

GWL_EXSTYLE

(-20)

获得扩展窗口风格。

GWL_HINSTANCE

(-6)

获得应用实例的句柄。

GWL_HWNDPARENT

(-8)

如果父窗口存在,获得父窗口句柄。

GWL_ID

(-12)

获得窗口标识。

GWL_STYLE

(-16)

获得窗口风格。

GWL_USERDATA

(-21)

获得与窗口有关的32位值。每一个窗口均有一个由创建该窗口的应用程序使用的32位值。

GWL_WNDPROC

(-4)

获得窗口过程的地址,或代表窗口过程的地址的句柄。必须使用CallWindowProc函数调用窗口过程。

[1]

hWnd参数为对话框句柄时,还可用下列值:


  
意义
  

DWL_DLGPROC

(4)

获得对话框过程的地址,或一个代表对话框过程的地址的句柄。必须使用函数CallWindowProc来调用对话框过程。

DWL_MSGRESULT

(0)

获得在对话框过程中一个消息处理的返回值。

DWL_USER

(8)

获得应用程序私有的额外信息,例如一个句柄或指针。

[1]

返回值: 如果函数成功,返回值是所需的32位值;如果函数失败,返回值是0。 

  SetLayeredWindowAttributes函数原型

Private Declare Function SetLayeredWindowAttributes Lib "user32" _
(ByVal hwnd As Long, _
ByVal crKey As Long, _
ByVal bAlpha As Long, _
ByVal dwFlags As Long) _
As Long

函数功能:此函数用于设置分层窗口透明度,常和 UpdateLayeredWindow 函数结合使用

参数:

hwnd:Long     //窗口句柄

crkey:Long    //指定需要透明的背景颜色值,可用RGB()宏

bAlpha:Long  //设置透明度,0表示完全透明,255表示不透明

dwFlags:Long //透明方式

其中,dwFlags参数可取以下值:

LWA_ALPHA时:crKey参数无效,bAlpha参数有效;

LWA_COLORKEY:窗体中的所有颜色为crKey的地方将变为透明,bAlpha参数无效。

LWA_ALPHA | LWA_COLORKEY:crKey的地方将变为全透明,而其它地方根据bAlpha参数确定透明度。

代码如下:

Private Declare Function SetWindowLong Lib "user32" _
                Alias "SetWindowLongA" _
                (ByVal hwnd As Long, _
                ByVal nIndex As Long, _
                ByVal dwNewLong As Long) _
                As Long
Private Declare Function GetWindowLong Lib "user32" _
                Alias "GetWindowLongA" _
                (ByVal hwnd As Long, _
                ByVal nIndex As Long) _
                As Long

Private Const GWL_EXSTYLE = (-20)
Private Const LWA_ALPHA As Long = &H2
Private Const WS_EX_LAYERED As Long = &H80000

Private Declare Function SetLayeredWindowAttributes Lib "user32" _
                (ByVal hwnd As Long, _
                ByVal crKey As Long, _
                ByVal bAlpha As Long, _
                ByVal dwFlags As Long) _
                As Long

Private Sub Form_Load()
  Dim p As Long
  p = GetWindowLong(Me.hwnd, GWL_EXSTYLE) ‘取得当前窗口属性
  Call SetWindowLong(Me.hwnd, GWL_EXSTYLE, p Or WS_EX_LAYERED)
  ‘加上一个半透明属性
  Call SetLayeredWindowAttributes(Me.hwnd, 0, 125, LWA_ALPHA)
End Sub

时间: 2024-12-16 15:27:26

VB API 之 透明窗体创建的相关文章

DSAPI 透明窗体+WIN7磨砂+窗体投影组合

你可以使用DSAPI和DS控件库组合多种特效,以下是透明窗体+WIN7磨砂+窗体投影组合效果 设计界面 编写代码 Private 透明 As New DSAPI.控件.Form窗体.透明窗体助手 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load DSAPI.Win7特性.设置窗体为磨砂透明效果_指定形状(Me, New Region(New Rectangle(0, 0, Me.Width,

纯win32实现PNG图片透明窗体

#include <windows.h> #include <gdiplus.h> /*  GDI+ startup token */ ULONG_PTR gdiplusStartupToken; /*  Declare Windows procedure  */ LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); // UpdateLayeredWindow Defination typedef BOOL(

Qt Widget 利用 Qt4.5 实现酷炫透明窗体

本文讲述的是Qt Widget 利用 Qt4.5 实现酷炫透明窗体,QWidget类中的每一个窗口部件都是矩形,并且它们按Z轴顺序排列的.一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分. 先来看内容吧. Qt4.2引入了QWidget::setWindowOpacity函数, 可以为窗体设置透明度, 从0.0到1.0之间, 值越小越透明. 经过设置的窗体可以整体呈现透明的效果. 但这种设置比较粗糙, 只能设一个整体的效果,大概只有比如像拖动的时候能用一下,大多数时候都不太实用.在

C# 制作透明窗体

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using ControlExs; namespace

透明窗体透明窗体 控件正常显示

//TransparentFrm透明窗体透明窗体 控件正常显示 {以图片的形状作为窗体形态}{使窗体透明 透明的只剩下个控件} // 调用 setFormTransParent(Form1); procedure setFormTransParent(Form:TForm); begin Form.BorderStyle:=bsNone; Form.TransparentColor:=True; Form.TransparentColorValue:=20; Form.Color:=Form.T

gdi+ 高速绘制透明窗体

gdi+ 高速绘制透明窗体: 方法一: 1.用Iamge对象载入png资源, 2.调用drawimage函数讲图片绘制出了 3.UpdateLayeredWindow对窗体进行布局 方法二: 1.用Bitmap对象载入资源 2.通过CDC选中,再用bitblt拷贝或者AlphaBlend融合到目标CDC上. 3.UpdateLayeredWindow对目标CDC上的hdc进行布局,达到融合背景的效果. 方法一是比較常规的方法,可是drawimage函数的效率太低,假设要实现实时更新的话就会有问题

【百度地图API】如何快速创建带有标注的地图?——快速创建地图工具+如何标注商家

原文:[百度地图API]如何快速创建带有标注的地图?--快速创建地图工具+如何标注商家 摘要: 如果你不会程序,如果你不想写代码. 如果你想拥有一张自己的地图,如果你想在该地图上标注出你商店的位置. 不要犹豫了,就使用快速创建地图工具吧! -------------------------------------------------------------------------------------- 如何快速创建地图? 一.转入百度提供的快速创建地图工具页面:http://openap

2017年11月27日 C#MDI窗体创建&amp;记事本打印&amp;记事本查找、自动换行

MDI窗体第一个父窗体 把属性里的IsMdiContainer设置为true就可以了 父窗体连接子窗体 //创建一个新的类,用来连接别的窗体,并且别的窗体为唯一窗体 List<Form> F = new List<Form>(); private void opendao(Form f) { Form F1 = null; bool isopen = false; foreach(Form gf in F) { gf.Hide(); if(gf.Name == f.Name) {

Unity 透明窗体的创建

原文地址:https://alastaira.wordpress.com/2015/06/15/creating-windowless-unity-applications/ 蛮牛地址:http://www.manew.com/thread-43230-1-1.html 该效果只针对Windows平台.结合摄像机的OnRenderImage事件和一些Windows底层API调用来实现该效果. 首先需要一个透明的Shader,我这直接使用系统的. 然后创建一个C#的脚本 TransparentWi