可以使用以下方法将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;

Win32窗口设置为透明的更多相关文章

  1. QT下的几种透明效果(QPalette背景白色,窗口设置setWindowOpacity,QPainter使用Clear模式绘图)

    1.窗口整体透明,但是窗体上的控件不透明.    通过设置窗体的背景色来实现,将背景色设置为全透. QPalette pal = palette(); pal.setColor(QPalette::B ...

  2. 如何在Console下面生成一个WIN32窗口

    一个小挑战? VS2017里面,新建一个控制台工程,输入名字(你不需要也成,有默认的),得到一个控制台工程. 好了,生成的代码,如下: // Win32InConsole.cpp : This fil ...

  3. Win32窗口框架

    Win32窗口框架 WindowClass 单例,负责窗口初始化注册和取消注册: 负责提供静态方法: 放在Window类内部,方便初始化时,wndProc(HandleMsgSetup)的赋值: cl ...

  4. Win32 - 窗口

    Win32 - 窗口 目录 Win32 - 窗口 前言 流程图 创建项目 VS MinGW Win32API字符串 Unicode 和 ANSI 函数 TCHAR WinMain:Win32 Appl ...

  5. Android控件颜色设置为透明

    开发Widget时,经常想把Widget的背景设置成透明的,显得比较有品位.如果想让控件的颜色是透明的,可以定义以下的颜色: <color name="black"># ...

  6. GridView 设置背景透明以及Item的点击动画

    //将点击时的背景色设置为透明 gridView.setSelector(new ColorDrawable(Color.TRANSPARENT)); 此时点击GridView的每个Item就不会出现 ...

  7. 27.给input边框和背景颜色设置全透明

    给input边框和背景颜色设置全透明,但是里面的字不会消失 1.让背景颜色变透明(二选一) background-color:rgba(0,0,0,0); background:rgba(0,0,0, ...

  8. C# winform基础 1、Timer不起作用 2、 设置图片透明

    1.设置图片透明 this.pibox.BackColor = System.Drawing.Color.Transparent;  //将背景设置为透明 this.pibox.Parent = la ...

  9. Android webview背景设置为透明无效 拖动时背景闪烁黑色

    Adndroid 2.X的设置 webview是一个使用方便.功能强大的控件,但由于webview的背景颜色默认是白色,在一些场合下会显得很突兀(比如背景是黑色). 此时就想到了要把webview的背 ...

  10. 第一个手写Win32窗口程序

    第一个手写Win32窗口程序 一 Windows编程基础 1 Win32应用程序的基本类型 1.1 控制台程序 不需要完善的Windows窗口,可以使用DOS窗口 的方式显示. 1.2 Win32窗口 ...

随机推荐

  1. 使用Echarts 动态更新散点图

    最近遇到一个作业,要求使用 Echarts 散点图,本来这个图是很容易的,官网上也有很多的教程.但是如果可以动态的更新 Echarts 散点图就更好了.我本身对 js 不感兴趣,经过不停的查找资料最终 ...

  2. java8 stream流的使用

    List<Paper> list = new ArrayList<>();list.add(new Paper("m",2L));list.add(new ...

  3. linux 设置开机自动挂载文件系统

    一./etc/ 下增加rc.local文件(ubuntu默认没有这个文件) kuaibang@face:~$ sudo touch rc.local 二.安装NFS客户端 a.如果您使用CentOS. ...

  4. element ui 分页

    修改选中页码的样式: .el-pager .active{ color:red !important;//选中 } .el-pager .number:hover{ color:red !import ...

  5. 07 从RDD创建DataFrame

    1.pandas df 与 spark df的相互转换 df_s=spark.createDataFrame(df_p) df_p=df_s.toPandas() 2. Spark与Pandas中Da ...

  6. linux火狐添加flash插件

    从官网上 adobe flash player 全版本通用安装  找到 linux 版本的 .gz 包, 复制下载链接 linux命令 su - cd /tmp wget -P /tmp https: ...

  7. c++学习3 转义字符

    一 "/"和某些字符的结合,产生新的字符就叫转义字符. '\0'==ASCII码值的"0". '\n'==换行符. '\t'==tab缩进符. '\a'==发出 ...

  8. Educational Codeforces Round 3 个人总结A-D

    Educational Codeforces Round 3 A. USB Flash Drives 降序排序后,贪心,甚至不会爆longlong void solve() { int n,m; ci ...

  9. 当前SAT主要关键技术及其相关文献2022-11-1

    摘录自: Tasniem Nasser Al-Yahya, Mohamed El Bachir Menai, Hassan Mathkour:Boosting the Performance of C ...

  10. Vue系列---【自定义vue组件发布npm仓库】

    自定义vue组件发布npm仓库 参考链接:自定义vue组件发布npm仓库