码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Win32窗口设置为透明


    可以使用以下方法将Win32窗口设置为透明:

    1. 定义窗口类时,在WNDCLASSEX结构体中设置hbrBackground成员为NULL。

    2. 在窗口创建时,使用WS_EX_LAYERED风格和SetLayeredWindowAttributes函数将窗口设置为透明:

    HWND hwnd = CreateWindowEx(WS_EX_LAYERED, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 100, NULL, NULL, hInstance, NULL);
    
    SetLayeredWindowAttributes(hwnd, 0, 255, LWA_ALPHA);
    

    其中,第二个参数指定颜色偏移量,第三个参数指定透明度,范围从0(完全透明)到255(完全不透明)。

    1. 在窗口的WM_PAINT消息处理函数中,使用CreateCompatibleDC函数创建一个与窗口DC兼容的内存DC,并将要绘制的图形绘制到该内存DC上。然后使用UpdateLayeredWindow函数将内存DC中的内容复制到窗口DC中。
    case WM_PAINT:
    {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hwnd, &ps);
    
        // 创建与窗口DC兼容的内存DC
        HDC memDC = CreateCompatibleDC(hdc);
    
        // 创建一个与窗口大小相同的位图
        HBITMAP memBmp = CreateCompatibleBitmap(hdc, 500, 100);
    
        // 将位图选入内存DC
        HBITMAP oldBmp = (HBITMAP)SelectObject(memDC, memBmp);
    
        // 在内存DC中绘制图形
        // ...
    
        // 使用UpdateLayeredWindow函数将内存DC中的内容复制到窗口DC中
        POINT ptSrc = { 0, 0 };
        SIZE size = { 500, 100 };
        BLENDFUNCTION blend = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA };
        POINT ptDst = { 0, 0 };
    
        UpdateLayeredWindow(hwnd, hdc, &ptDst, &size, memDC, &ptSrc, 0, &blend, ULW_ALPHA);
    
        // 恢复原来的位图
        SelectObject(memDC, oldBmp);
    
        // 释放内存DC和位图
        DeleteDC(memDC);
        DeleteObject(memBmp);
    
        EndPaint(hwnd, &ps);
    }
    break;
    

    以上代码中,在内存DC中绘制图形的过程自行实现。另外,由于UpdateLayeredWindow函数需要使用内存DC和位图,因此需要在WM_DESTROY消息处理函数中释放这些资源:

    case WM_DESTROY:
    {
        PostQuitMessage(0);
        DeleteObject(hBrush);
        DeleteObject(hPen);
        DeleteObject(hFont);
        DeleteObject(hImage);
    
        // 释放内存DC和位图
        HDC memDC = GetDC(hwnd);
        ReleaseDC(hwnd, memDC);
    }
    break;
  • 相关阅读:
    LeetCode题解02_排序汇总-16题
    8.6 矢量图层点要素基于规则(Rule-based)渲染使用
    重磅!首例植入配备 BCI 的神经刺激器的患者恢复手臂功能
    NumPy数组与矩阵(二)
    高等数值计算方法学习笔记第4章【数值积分(数值微分)】
    【翻译】Raft 共识算法:集群成员变更
    基于GPTP时间同步(时钟同步服务器)技术助力智能驾驶应用
    【Solidity】Solidity中的基本数据类型和复合数据类型
    # NSSCTF Round#V
    2023年优化算法之之霸王龙优化算法(TROA),原理公式详解,附matlab代码
  • 原文地址:https://www.cnblogs.com/bzbk/p/17197596.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号