使窗体拥有透明效果的API

玩玩吧xyq

玩玩吧xyq

2016-01-29 11:51

使窗体拥有透明效果的API,使窗体拥有透明效果的API

使窗体拥有透明效果的API
作者:南海昭信king_koo

下载本文源代码

一、背景
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试试!


(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)

示例代码运行效果图

二、简单介绍一下SetLayeredWindowAttributes:(详见msdn)

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)
BOOL SetLayeredWindowAttributes(HWND hwnd, // handle to the layered windowCOLORREF crKey, // specifies the color keyBYTE bAlpha, // value for the blend functionDWORD 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的话完全透明,你就找不到窗体了!
小小心得,一吐为快.希望对初学者有所帮助.如有不妥,欢迎指正.
展开更多 50%)
分享

猜你喜欢

使窗体拥有透明效果的API

C语言教程 C语言函数
使窗体拥有透明效果的API

怎样透明Java窗体

电脑入门
怎样透明Java窗体

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

透明窗体的又一实现

C语言教程 C语言函数
透明窗体的又一实现

制造出透明的窗体(Form)

编程语言 网络编程
制造出透明的窗体(Form)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何使宝宝拥有健康的情绪

健康 情绪
如何使宝宝拥有健康的情绪

不会被其他窗体遮挡的抓图 使用API的PrintWindow函数

电脑网络
不会被其他窗体遮挡的抓图 使用API的PrintWindow函数

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

如何发送命令到文档对象

如何发送命令到文档对象

PSV《战国无双 编年史3》部分战历获取方法介绍

PSV《战国无双 编年史3》部分战历获取方法介绍
下拉加载更多内容 ↓