win32下实现透明窗体
最開始写透明窗体的代码,在百度了之后,找到了SetLayeredWindowAttributes()这一个函数,可是因为网上案列的缺少,使得非常多人无法非常好的使用这一个方法,我花了几天的时间写了一个实现窗体透明的类,在这里放出来,给大家使用
- #define WS_EX_LAYERED 0x00080000
- #define LWA_COLORKEY 0x00000001
- #define LWA_ALPHA 0x00000002
- class CTransparent
- {
- public:
- static BOOL SetTransparentWnd(HWND hWnd, COLORREF crKey, UINT cAlpha, BOOL dwFlags);
- static BOOL FreeUser32DLL();
- static BOOL ChangeTransparency(HWND hWnd,COLORREF crKey, UINT bAlpha, DWORD dwFlags);
- static BOOL LoadUser32DLL();
- static TRANFUNC m_pFunc;
- static HINSTANCE m_hInstance;
- static BOOL initialized;
- };
- HINSTANCE CTransparent::m_hInstance = NULL;
- TRANFUNC CTransparent::m_pFunc = NULL;
- BOOL CTransparent::initialized = FALSE;
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- BOOL CTransparent::LoadUser32DLL()
- {
- BOOL bRet = FALSE;
- if (!initialized)
- {
- m_hInstance = LoadLibrary(L"User32.DLL");
- if(m_hInstance )
- {
- //取得SetLayeredWindowAttributes函数指针
- m_pFunc=(TRANFUNC)GetProcAddress(m_hInstance, "SetLayeredWindowAttributes");
- if(m_pFunc != NULL)
- {
- initialized = TRUE;
- bRet = TRUE;
- }
- }
- }
- return bRet ;
- }
- BOOL CTransparent::ChangeTransparency(HWND hWnd, COLORREF crKey, UINT bAlpha, DWORD dwFlags)
- {
- //透明度Sp的值是0-255
- //当中0为全然透明应该避免出现
- BOOL bRet = FALSE;
- if (m_pFunc == NULL)
- LoadUser32DLL();
- if(m_pFunc != NULL)
- {
- m_pFunc(hWnd, crKey, bAlpha, dwFlags);
- bRet = TRUE;
- }
- return bRet;
- }
- BOOL CTransparent::FreeUser32DLL()
- {
- if(m_hInstance != NULL)
- {
- FreeLibrary(m_hInstance);
- if(m_pFunc != NULL) //置空
- m_pFunc = NULL ;
- if(initialized != NULL) //置空
- initialized = NULL ;
- }
- return TRUE;
- }
- BOOL CTransparent::SetTransparentWnd(HWND hWnd, COLORREF crKey, UINT cAlpha, BOOL dwFlags)
- {
- BOOL bRet = TRUE;
- //要使使窗口拥有透明效果,首先要有WS_EX_LAYERED扩展属性 WS_EX_LAYERED = 0x80000
- //SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
- SetWindowLong(hWnd,
- GWL_EXSTYLE ,
- GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
- if(dwFlags)
- {
- ChangeTransparency(hWnd, crKey, cAlpha, LWA_ALPHA); //设置cAlpha值0-255
- }
- else
- {
- ChangeTransparency(hWnd, crKey, cAlpha, LWA_COLORKEY); //crkey同样色变成透明
- }
- return bRet;
- }
在这里调用这个静态方法就可以.
- HWND m_hMyWnd = ::CreateWindow(L"LoginWndDLL", L"TraWnd", WS_POPUP,
- (int)((xRes - m_WndWidth) / 2), (int)((yRes - m_WndHeight) / 2), m_WndWidth, m_WndHeight, 0, 0, hInst, 0);
- //在这里注冊一个窗体第三个參数表示窗体的类型
- CTransparent::SetTransparentWnd((HWND)m_hMyWnd, 0xffffff, 200, 2); //设置窗体透明
- ::ShowWindow(m_hMyWnd, SW_SHOW);
实际上上面这个类使用了动态调用user32.dll中的SetLayeredWindowAttributes函数,通过这个函数来实现窗体透明方式,这种方法与网上的大多数方法类似,只是是加了一个类进行了封装
win32下实现透明窗体的更多相关文章
- qt 获取windows 的消息(通过MFC的DLL的透明窗体转发消息)good
qt 给win32 发送消息很简单,但是要获取windows 消息却十分复杂,最后想了一个不是很完美 但是也是以现在本人能力所能实现的唯一途径了,基本原理是 利用vc编写一个mfc 的dll ,这个d ...
- WPF透明窗体不支持缩放解决方案
方案一 WPF中的无边框透明窗体,由于没有边并且透明,窗体无法进行缩放操作,今天来讲解如何解决这个问题. 先说一下思路,我们先手为该窗体添加4个边,4个角用于缩放操作,然后再为他们写事件,完成拖放操作 ...
- JavaFX之FXML+CSS创建窗体以及透明窗体添加阴影
前言 开通博客园有一段日子了,一直没空也没想好该写点什么.最近正好在做一个桌面程序,初次接触JavaFX,体验下来确实比swing好用不少.索性便记记学习笔记吧,虽然FX好像挺没存在感,没人用的感觉. ...
- MVVM模式下弹出窗体
原地址:http://www.cnblogs.com/yk250/p/5773425.html 在mvvm模式下弹出窗体,有使用接口模式传入参数new一个对象的,还有的是继承于一个window,然后在 ...
- IE6下Png透明最佳解决方案(推荐) Unit PNG Fix
引自:http://www.yeeyan.org/articles/view/98510/67784 网络上解决IE6下Png透明解决方案有很多,例如 IE PNG Fix from TwinHeli ...
- (转)解决png图片在IE6下不透明的方法
来源于:http://xzl52199.blog.163.com/blog/static/95206446201142174540220/ 一.传统的JavaScript方法 思路: 1.一个专门解决 ...
- cocos2dx c++ 在mac下写的中文凝视,在win32下编译时不通过
今天遇到个奇怪的问题,在mac下写的程序,加的中文凝视,编译没有问题,可是在win32下(使用的时vs2012, win7 64bit 系统)编译就总是报错 最后在中文凝视后 加一个空格,或者 换行, ...
- win32下用VC扩展PHP全过程
闲着无聊,打算开发一些PHP组件来玩玩,由于在家没有工作环境,遂打算在win32(我的环境是vista)用VC开发DLL模块,费话不 多说了,进入正题: 一.已经在机器上安装PHP环境的就略过,否则先 ...
- ie8下的透明 问题
团队里经常遇到,索性整理一起 是我们在前端开发中经常遇到的,在问题中经常遇到的两个问题是背景色透明和整体透明 先说下背景色透明,背景色透明,在现代浏览器中,可以用rgba颜色作为背景色. 简单介绍下r ...
随机推荐
- 3ds Max怎么制作亮木材质的球体
3DSMax怎么制作亮木材质的球体?3DSMax中想要设计一款亮木材质的球体,该怎么设置呢?下面我们就来看看详细的教程,需要的朋友可以参考下! 1.运行软件,选择材质编辑器图标: 3.双击拖拽出的材质 ...
- 理解ZBrush中的笔触
笔触主要配合笔刷来使用,同样的笔刷搭配不同的笔触可以绘制出各种不同的效果.简言之,ZBrush 4R8就是提供了各种各样的笔触效果,例如,有模拟连贯笔触的效果,也有模拟喷枪喷洒的笔触效果. 下面简单认 ...
- LAMP环境搭建备忘 -- MariaDB 安装(三)
因为 MySQL 的一些原因,在 Linux 平台上的开源数据库渐渐被 MariaDB 取代. MariaDB 安装命令如下图 安装成功后,接下来就启动这个数据库服务 我们还需要对数据库做一些初始化的 ...
- java String字符串操作 字符串加密等
子串加密 1,设计思想 (1)输入一个字符串 (2)通过toCharArray()的方法将字符串转换成字符数组 (3)新建一个字符数组用来存储修改后的字符数组 2,程序流程图 3,源代码 packag ...
- 紫书 例题8-11 UVa 10954 (优先队列)
解法和合并果子是一样的, 每次取最小的两个, 更新答案, 加入队列 #include<cstdio> #include<queue> #define REP(i, a, b) ...
- Maven项目的坐标GroupId和ArtifactId
GroupId和ArtifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找. GroupId一 ...
- Ask DevOps: Top 5 Business Alternatives to Splunk
https://siliconangle.com/blog/2012/11/20/ask-devops-top-5-business-alternatives-to-splunk/
- 洛谷 P2960 [USACO09OCT]Milkweed的入侵Invasion of the Milkweed
P2960 [USACO09OCT]Milkweed的入侵Invasion of the Milkweed 题目描述 Farmer John has always done his best to k ...
- HNU13377:Book Club(DFS)
Problem description Porto's book club is buzzing with excitement for the annual book exchange event! ...
- Android sdk版本以及兼容性问题
Android:minSdkVersion —— 此属性决定你的应用能兼容的最低的系统版本,一盘情况是必须设置此属性. android:targetSdkVersion —— 此属性说明你当前的应用是 ...