Windows核心编程_异型窗口
异型窗口是Windows200在窗口中引入的WS_EX_LAYERED风格,并搭配:SetLayeredWindowAttributes API实现的,这里所说的异型窗口不是指椭圆型的窗口或三角型之类的窗口:
这一类的窗口在早期的Windows里就已经规定了的,只需要在创建窗口时修改stsy风格就可以了,这里所说的异型窗口是不规则口,比如一些游戏界面:
类似这种在Windows并没有显示指定的风格界面
WS_EX_LAYERED风格是使窗体支持层次关系并支持透明,而SetLayeredWindowAttributes是设置窗口指定像素点透明!
大致思路就是,在窗口上放置UI图片并让其支持WS_EX_LAYERED风格,然后设置窗口背景色为黑色,在使用SetLayeredWindowAttributes设置窗口黑色像素点为透明色,即可达到这种效果!
这里我已经创建好一个窗口:
此窗口背景为黑色,图像为红色,为什么使用黑色?
答:SetLayeredWindowAttributes使像素透明时一旦不在像素范围内的就不会使其透明化,那怕像素值差1都不行,所以图像轮廓区域会留下一些痕迹锯齿,剔除不明显,所以黑色较暗,不明显!
代码:
//获取窗口句柄HWND hwnd = FindWindow(NULL, "1");//设置风格LONG t = GetWindowLong(hwnd, GWL_EXSTYLE);t |= WS_EX_LAYERED;SetWindowLong(hwnd, GWL_EXSTYLE, t);//设置透明SetLayeredWindowAttributes(hwnd, RGB(0, 0, 0), 0, LWA_COLORKEY);
运行效果:
这里边框我保留了下来方便移动,如果觉得碍眼可以增加:WS_POPUP风格去除:
被透明化的颜色会被鼠标穿透,但是没有被透明化的还是支持鼠标消息的!
最后对SetLayeredWindowAttributes函数介绍:
BOOL SetLayeredWindowAttributes(
HWND hwnd, // 指定分层窗口句柄
COLORREF crKey, // 指定需要透明的背景颜色值,可用RGB()宏
BYTE bAlpha, // 设置透明度,0表示完全透明,255表示不透明
DWORD dwFlags // 透明方式
);
其中,dwFlags参数可取以下值:
LWA_ALPHA时:crKey参数无效,bAlpha参数有效;
LWA_COLORKEY:窗体中的所有颜色为crKey的地方将变为透明,bAlpha参数无效。其常量值为1。
LWA_ALPHA | LWA_COLORKEY:crKey的地方将变为全透明,而其它地方根据bAlpha参数确定透明度。
如果想让窗口层次全部透明只需要使用:
LWA_ALPHA
风格即可,让crkey参数失效,则让窗口全部区域透明化,而不以层次关系区分!
Windows核心编程_异型窗口相关推荐
- Windows核心编程_异型窗口(续)
上一篇文章介绍的是使用SetLayeredWindowAttributes API来实现异型窗口,但是很明显效果很差劲,在剔除颜色的过程中凹凸边缘区域的像素点会剔除的非常不明显,在查找信息之后,得出的 ...
- Windows核心编程_将窗口嵌入到桌面图标下面不被遮挡 spy 分析过程
近年很流行动态视频桌面,实则上早期的windows vista系统上有一个Windows DreamScene软件将桌面壁纸设置成视频,但是是收费的! 首先先来观察一下Windows桌面的组成单元: ...
- Windows核心编程_让窗口跟随系统样式变化
当我们使用 VS 编写win32程序时,窗口会有点丑,这个是因为GDI库,Windows有自己的UI库代码,但是版本很多,不同内核版本使用的GUI库不一样,一般vs在编译win32程序时会给你加载一个 ...
- Windows核心编程_获取鼠标指定位置的RGB颜色值
Windows核心编程_获取鼠标指定位置的RGB颜色值 大家平常会见到很多屏幕取色工具,其原理都是获取鼠标位置的屏幕像素点颜色! 一般思路都是:获取鼠标位置,然后取出鼠标指向的屏幕像素点颜色! Get ...
- Windows核心编程_设置Windows开机自动登录
设置自动登录的方法在Windows中已经给出了非常方便的方法,当Windows内核进入登入界面时会检查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ ...
- Windows核心编程_调用控制台窗口
在我们进行mfc编程和win32窗口编程时,会发现没有控制台窗口其实有时候很无助的,想展示一个数据,要么msg要么debug,但是往往最熟悉的还是那个黑色的窗口 方法: AllocConsole() ...
- Windows核心编程_提权
在Windows下编程有些涉及到硬件或者跨内存的API会发现失效了,原因是因为权限问题,这也是Windows出于安全的保护,但是事物都有两面性的,Windows又为我们提供了提权的API! 1.Adj ...
- Windows核心编程_窗口透明组件不透明
经过前几篇对界面编程的学习,已经对Windows窗口消息有了更加深刻的理解,今天就教大家写一个窗口透明而组件却不透明的小示列! 这个demo并不难,而且还非常的简单,如果你看过我的前几篇针对界面编程写 ...
- Windows核心编程_在Visual Studio窗口输出调试信息
OutputDebugString 该函数会将打印信息输出到VS输出窗口中 注意是输出窗口 但是它只支持一个参数 同时还要OutputDebugStringA和OutputDebugStringW分别 ...
最新文章
- CentOS 6.3 运维监控之Cacti 监控主机系统(二)
- 滚动视差?CSS 不在话下
- gateway sentinel 熔断 不起作用_《一起学sentinel》一
- django F和Q 关键字使用
- win7 nginx mysql php_windows7配置Nginx+php+mysql的详细教程
- 解决C语言程序报错:return type defaults to‘int’
- c语言作业帮,少训练大功课C语言
- 荣耀正式加入GSMA 成为其企业成员单位
- *2.3.2_加入env
- 吴恩达机器学习视频教程(含课程作业源代码和学习笔记)
- Unity3D研究院之mac上从.ipa中提取unity3D游戏资源
- 软件测试面试必问的10个问题
- 使用winfrom调用BarTender实现标签的打印
- Word生成目录后,前面还有摘要,怎么样让页码从正文第一页开始
- 通过EasyPOI导入excel数据
- PCL点云滤波器总结
- 二叉树层次遍历(借助队列实现)
- 数据库表赋权给指定用户
- Python 关于引用注意
- linux系统怎么共享网络,在Linux操作系统的网络上共享计算机
热门文章
- python 服务监控_promethues + python + flask监控后端服务状态
- washer和shell有什么区别_disk or washer method?
- vue实现搜索框搜索新增_基于Vue el-autocomplete 实现类似百度搜索框功能_含真_前端开发者...
- office怎么像wps一样多栏_时常受到欺负怎么办?——要像对付野狗一样对付坏人!...
- 《与爱因斯坦月球漫步——美国记忆力冠军教你记忆一切》读书摘抄[美]乔舒亚.福尔
- Java:List判空的条件:List=null 和 List.size = 0 当需要对一个LIst进行判空操作时我们可使用如下两个语句:
- proj编译linux,在Ubuntu上安装proj 投影转换程序
- 大学生计算机大赛课题,第14届中国大学生计算机设计大赛云南赛区决赛举行 32个项目胜出...
- python服务器运维书_python自动化运维书
- window安装python3后怎么用pyspark_pyspark:连接spark集群Windows环境搭建