使窗体拥有透明效果的API
一、背景
FlashGet的透明效果大家羡慕吧.传统的Windows应用程序想实现半透明效果,一般来说需要处理自己的窗口的WM_Paint消息窗口,很麻烦.现在好了,SetLayeredWindowAttributes是windows的新api,win2000以上才支持,它能使使窗体拥有透明效果.我在Google搜了下,介绍SetLayeredWindowAttributes的文章大多是delphi的和vb的.好不容易找到一篇vc的,依法炮制后,vc的IDE却说我SetLayeredWindowAttributes没有定义!后来想想应该是我的sdk没有升级.于是我在vc安装目录搜索"SetLayeredWindowAttributes"的"*.h"文件,果然没有.怎么办?升级sdk吧.我去微软的网站一看,新的sdk就核心sdk就有二百多m呢(解压后更大),可怜我的硬盘没有一个分区大于200m的了!怎么办,这么好玩的api给看不给用:( 失望之余,我忽然想到了未公开api的使用的方法.这是个系统支持,自己sdk却没有的api,就把他当做windows未公开api试试!
示例代码运行效果图
二、简单介绍一下SetLayeredWindowAttributes:(详见msdn)
BOOL SetLayeredWindowAttributes( HWND hwnd, // handle to the layered window COLORREF crKey, // specifies the color key BYTE bAlpha, // value for the blend function DWORD dwFlags // action );
<Requirements>
Windows NT/2000/XP: Included in Windows 2000 and later.
Windows 95/98/Me: Unsupported.
Header: Declared in Winuser.h; include Windows.h.
Library: Use User32.lib.
一些常量:
WS_EX_LAYERED = 0x80000;
LWA_ALPHA = 0x2;
LWA_COLORKEY=0x1
其中dwFlags有LWA_ALPHA和LWA_COLORKEY
LWA_ALPHA被设置的话,通过bAlpha决定透明度.
LWA_COLORKEY被设置的话,则指定被透明掉的颜色为crKey,其他颜色则正常显示.
注:要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性(旧sdk也没有的).
三、例子代码:
在OnInitDialog()加入:
//加入WS_EX_LAYERED扩展属性 SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE, GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000); HINSTANCE hInst = LoadLibrary("User32.DLL"); if(hInst) { typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD); MYFUNC fun = NULL; //取得SetLayeredWindowAttributes函数指针 fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes"); if(fun)fun(this->GetSafeHwnd(),0,128,2); FreeLibrary(hInst); }
唉!如果装了最新sdk就不用那么麻烦了!
怎么样,效果不错吧!稍加修改还可以作出淡出淡入的效果. 注意第三个参数(128)不要取得太小了,为0的话完全透明,你就找不到窗体了!
小小心得,一吐为快.希望对初学者有所帮助.如有不妥,欢迎指正.
使窗体拥有透明效果的API相关推荐
- VB.NET弹幕--- 利用API函数AnimateWindow创建Popup提示窗口,窗体的动画效果---章鱼哥
当我们打开电脑上网时,是不是会经常看到桌面的右下角弹出一个小的新闻热点窗体,我们可以实现吗?当然可以,这篇文章就来给您掩饰怎么样来用代码实现.看吧,正写着呢弹出了一个. A,参数设置 hWnd:指定产 ...
- 使控件拥有透明背景色 [引用]
默认情况下,控件不支持透明背景色.但是,通过使用构造函数中的 Control.SetStyle 方法,可以让控件拥有不透明.透明或半透明的背景色.Control 类的 SetStyle 方法用于为控件 ...
- Windows窗体透明效果
虚拟机里的win7也想实现透明效果, 使用vitrite这个免费软件就可以了.
- NeHe的OpenGL教程8(Bang翻译Delphi版)-如何制作立体透明效果
NeHe的OpenGL教程8(Bang翻译Delphi版)-如何制作立体透明效果 在这一课里,我将教会你如何制作立体透明效果,如下图: 将下图放在应用程序data目录下,起名NeHe.bmp prog ...
- OpenGL教程8(Bang翻译Delphi版)-如何制作立体透明效果 .
OpenGL教程8(Bang翻译Delphi版)-如何制作立体透明效果 在这一课里,我将教会你如何制作立体透明效果,如下图: 将下图放在应用程序data目录下,起名NeHe.bmp program l ...
- android如何添加透明图片按钮,如何拥有透明的ImageButton:Android
如何拥有透明的ImageButton:Android android:layout_width="wrap_content" android:layout_height=" ...
- 《Unity着色器和屏幕特效》——2.2 进阶的透明效果
本节书摘来自华章计算机<Unity着色器和屏幕特效>一书中的第2章,第2.2节,作者[美]杰米·迪恩(Jamie Dean),译 周翀,张薇,更多章节内容可以访问云栖社区"华章计 ...
- WPR-007:WPF中窗体的透明设置
一般使用WindowStyle=,Background=,AllowsTransparency,Opacity来进行设置. 1.设置Opacity控制整个窗口的透明,包括上面的控件 Window x: ...
- 网页设计中 透明效果的使用技巧
运用好透明效果是提高网页设计水准的重要方法之一.如同使用其他方法一样,设计师们有很多种手段将透明效果运用到网页中,今天这篇文章就来好好和您分享一下关于"透明"的实用小技巧哟:) 在 ...
最新文章
- 聚焦基础科学 引领未来发展
- JS 总结之原型继承的几种方式
- 软件测试沟通技巧,你到底应该如何沟通:沟通的技巧
- 1024|程序员节来了!
- 【算法】学习笔记(0):算法初探(逻辑抽象 + 示例 + 代码实现)
- 登陆SQL Server 2008时提示评估期已过的解决办法
- 两路语音 两路计算机数据综合,两路语音PCM时分复用系统的设计.DOC
- 伏安特性曲线实验报告_【鼎阳硬件智库原创 | 测试测量】动手测量电解电容器的阻抗频率特性...
- 如何将wiki个人空间共享给其他人_青年居室的共享空间设计
- [渝粤教育] 重庆电子工程职业学院 信息技术与人工智能基础 参考 资料
- 小技巧(8):Word中自定义目录,并设置自动目录的格式
- cvpr2020 人脸检测与识别_就CVPR2020的来看,目前人工智能的研究热点有哪些进展?未来的研究趋势会有什么变化?...
- 镜像翻转_【资讯】装动镜世界版假面骑士时王登场,镜像翻转也算新规?
- CentOS8部署多版本共存Python开发环境
- php实现魔方变换颜色,php魔方方法
- GAN(生成对抗网络) 解释
- 为南通市2017中考数学试卷画的图
- php不支持gd库,如何解决php不支持gd库的问题
- 基于stm32c8t6移植FreeRTOS问题汇总
- 工程类如安监、基建等项目投标流程规范建议