一、背景
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相关推荐

  1. VB.NET弹幕--- 利用API函数AnimateWindow创建Popup提示窗口,窗体的动画效果---章鱼哥

    当我们打开电脑上网时,是不是会经常看到桌面的右下角弹出一个小的新闻热点窗体,我们可以实现吗?当然可以,这篇文章就来给您掩饰怎么样来用代码实现.看吧,正写着呢弹出了一个. A,参数设置 hWnd:指定产 ...

  2. 使控件拥有透明背景色 [引用]

    默认情况下,控件不支持透明背景色.但是,通过使用构造函数中的 Control.SetStyle 方法,可以让控件拥有不透明.透明或半透明的背景色.Control 类的 SetStyle 方法用于为控件 ...

  3. Windows窗体透明效果

    虚拟机里的win7也想实现透明效果, 使用vitrite这个免费软件就可以了.

  4. NeHe的OpenGL教程8(Bang翻译Delphi版)-如何制作立体透明效果

    NeHe的OpenGL教程8(Bang翻译Delphi版)-如何制作立体透明效果 在这一课里,我将教会你如何制作立体透明效果,如下图: 将下图放在应用程序data目录下,起名NeHe.bmp prog ...

  5. OpenGL教程8(Bang翻译Delphi版)-如何制作立体透明效果 .

    OpenGL教程8(Bang翻译Delphi版)-如何制作立体透明效果 在这一课里,我将教会你如何制作立体透明效果,如下图: 将下图放在应用程序data目录下,起名NeHe.bmp program l ...

  6. android如何添加透明图片按钮,如何拥有透明的ImageButton:Android

    如何拥有透明的ImageButton:Android android:layout_width="wrap_content" android:layout_height=" ...

  7. 《Unity着色器和屏幕特效》——2.2 进阶的透明效果

    本节书摘来自华章计算机<Unity着色器和屏幕特效>一书中的第2章,第2.2节,作者[美]杰米·迪恩(Jamie Dean),译 周翀,张薇,更多章节内容可以访问云栖社区"华章计 ...

  8. WPR-007:WPF中窗体的透明设置

    一般使用WindowStyle=,Background=,AllowsTransparency,Opacity来进行设置. 1.设置Opacity控制整个窗口的透明,包括上面的控件 Window x: ...

  9. 网页设计中 透明效果的使用技巧

    运用好透明效果是提高网页设计水准的重要方法之一.如同使用其他方法一样,设计师们有很多种手段将透明效果运用到网页中,今天这篇文章就来好好和您分享一下关于"透明"的实用小技巧哟:) 在 ...

最新文章

  1. 聚焦基础科学 引领未来发展
  2. JS 总结之原型继承的几种方式
  3. 软件测试沟通技巧,你到底应该如何沟通:沟通的技巧
  4. 1024|程序员节来了!
  5. 【算法】学习笔记(0):算法初探(逻辑抽象 + 示例 + 代码实现)
  6. 登陆SQL Server 2008时提示评估期已过的解决办法
  7. 两路语音 两路计算机数据综合,两路语音PCM时分复用系统的设计.DOC
  8. 伏安特性曲线实验报告_【鼎阳硬件智库原创 | 测试测量】动手测量电解电容器的阻抗频率特性...
  9. 如何将wiki个人空间共享给其他人_青年居室的共享空间设计
  10. [渝粤教育] 重庆电子工程职业学院 信息技术与人工智能基础 参考 资料
  11. 小技巧(8):Word中自定义目录,并设置自动目录的格式
  12. cvpr2020 人脸检测与识别_就CVPR2020的来看,目前人工智能的研究热点有哪些进展?未来的研究趋势会有什么变化?...
  13. 镜像翻转_【资讯】装动镜世界版假面骑士时王登场,镜像翻转也算新规?
  14. CentOS8部署多版本共存Python开发环境
  15. php实现魔方变换颜色,php魔方方法
  16. GAN(生成对抗网络) 解释
  17. 为南通市2017中考数学试卷画的图
  18. php不支持gd库,如何解决php不支持gd库的问题
  19. 基于stm32c8t6移植FreeRTOS问题汇总
  20. 工程类如安监、基建等项目投标流程规范建议

热门文章

  1. python另一个程序正在使用此文件_另一个程序正在使用此文件,进程无法访问
  2. 热烈祝贺《大数据》主编郑纬民教授当选中国工程院院士!!!
  3. 【项目管理】管理良好沟通
  4. 坏掉的项链(洛谷P1203题题解,C++语言描述)
  5. 【数据库系统】大学模式
  6. 【JSON】JSON入门详解(二)
  7. MicroSoft CryptoAPI data/file encrypt/decrypt
  8. 英国科学家研究用AI预测地震:未来或提前一周预报
  9. ifconfig route 手动设置网卡route路由 示例
  10. addrinfo 结构