• 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

  • 相关阅读:
    wmq的A×B Problem
    MATLAB 求系统的单位冲击响应及单位阶跃响应
    关于共享率过低的一些事
    Vue组件之间的通信
    浏览器支持ES6的import和export
    Vue axios拦截问题
    开屏倒计时
    git常用操作
    原型
    this指向问题
  • 原文地址:https://www.cnblogs.com/delphi2014/p/4060370.html
Copyright © 2020-2023  润新知