win32下实现透明窗口
来源:互联网 发布:支付宝钓鱼软件 编辑:程序博客网 时间:2024/04/30 17:25
最开始写透明窗口的代码,在百度了之后,找到了SetLayeredWindowAttributes()这一个函数,但是由于网上案列的缺少,使得很多人无法很好的使用这一个方法,我花了几天的时间写了一个实现窗口透明的类,在这里放出来,给大家使用
#define WS_EX_LAYERED 0x00080000#define LWA_COLORKEY 0x00000001#define LWA_ALPHA 0x00000002class 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函数,通过这个函数来实现窗口透明方式,这个方法与网上的大多数方法类似,不过是加了一个类进行了封装
1 0
- win32下实现透明窗口
- win32实现两个透明窗口联动
- 在win2000下实现透明窗口
- WindowsXP下实现透明窗口功能
- win32下gdiplus的使用/实现PNG图片透明窗体
- Windows下透明窗口
- gtk+实现透明窗口
- 如何实现透明窗口
- MFC实现透明窗口
- 实现窗口透明
- 透明窗口的实现
- java实现窗口透明
- wxPython 窗口实现透明
- VC实现透明窗口
- [Win32 & GDI+Flat] 用分层窗口实现简单仿Aero透明效果
- VC如何实现透明窗口
- VC如何实现透明窗口
- 用SetLayeredWindowAttributes实现窗口透明
- C#连接数据库语句
- android项目之间的相互引用出现的问题
- Linux(RedHat,Centos)上scrapy详尽安装笔记
- 复数
- iOS 推送的一些示例代码和注意的问题
- win32下实现透明窗口
- 46黑名单显示的bug---(优化ListView)convertView复用带来的问题
- 基础网络概念(六)无连接的UDP协议
- XML
- Java基本功练习十(多维数组强化二【悬挂的四子棋】)
- myeclipse以debug方式启动tomcat问题
- linux之SQL语句简明教程---SUBSTRING
- nyoj 36 最长公共子序列 & nyoj 37 回文字符串
- nyoj 279 队花的烦恼2