windows笔记-API实现透明窗体
2013-11-11 15:19
337 查看
windows笔记-API实现透明窗体
win7的透明的透明效果看起来炫吧 ^_-。
其实用简单的系统API就可以实现了。如下:
SetLayeredWindowAttributes:
dwFlags :
当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效。
当取值为LWA_COLORKEY时,窗体中的所有颜色为crKey的地方将变为透明,bAlpha参数无效。
也可以取两个值的组合:LWA_ALPHA | LWA_COLORKEY。这样crKey的地方将变为全透明,而其它地方根据bAlpha参数确定透明度。
WS_EX_LAYERED
要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性。
例子:
效果:
参考资料:http://baike.baidu.com/view/1329156.htm
本文地址:/article/5259784.html
win7的透明的透明效果看起来炫吧 ^_-。
其实用简单的系统API就可以实现了。如下:
SetLayeredWindowAttributes:
BOOL SetLayeredWindowAttributes( HWND hwnd, // 透明窗体的句柄 COLORREF crKey, // 掩码的颜色 BYTE bAlpha, // 不透明度 DWORD dwFlags // 透明方式 );
dwFlags :
当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效。
当取值为LWA_COLORKEY时,窗体中的所有颜色为crKey的地方将变为透明,bAlpha参数无效。
也可以取两个值的组合:LWA_ALPHA | LWA_COLORKEY。这样crKey的地方将变为全透明,而其它地方根据bAlpha参数确定透明度。
WS_EX_LAYERED
要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性。
LONG nRet = ::GetWindowLong(hWnd, GWL_EXSTYLE); nRet = nRet | WS_EX_LAYERED; ::SetWindowLong(hWnd, GWL_EXSTYLE, nRet);
例子:
// ------------------------------------------------------------------------- // 文件名 : WinMain.cpp // 创建者 : 方煜宽 // 邮箱 : fangyukuan@gmail.com // 功能描述 : 透明窗体 // // ------------------------------------------------------------------------- #include<windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); const int X0 = 120; const int Y0 = 50; const int WIDTH = 800; const int HEIGHT = 600; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { HWND hWnd; MSG msg; TCHAR lpszClassName[] = TEXT("窗口"); WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = ::LoadIcon(NULL,IDI_APPLICATION); wc.hCursor = ::LoadCursor(NULL,IDC_ARROW); wc.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = lpszClassName; RegisterClass(&wc); hWnd = CreateWindow(lpszClassName, TEXT("Windows"), WS_OVERLAPPEDWINDOW, X0, Y0, WIDTH, HEIGHT, NULL, NULL, hInstance, NULL); ::ShowWindow(hWnd, SW_SHOWNORMAL); ::UpdateWindow(hWnd); // 实现透明必须设置WS_EX_LAYERED标志 LONG nRet = ::GetWindowLong(hWnd, GWL_EXSTYLE); nRet = nRet | WS_EX_LAYERED; ::SetWindowLong(hWnd, GWL_EXSTYLE, nRet); while(::GetMessage(&msg, NULL, 0, 0)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_LBUTTONDOWN: { ::MessageBeep(0); ::SetLayeredWindowAttributes(hWnd, 0, 123, LWA_ALPHA); // 设置半透明 } break; case WM_RBUTTONDOWN: { ::MessageBeep(0); ::SetLayeredWindowAttributes(hWnd, 0, 255, LWA_ALPHA); // 设置不透明 } break; case WM_DESTROY: ::PostQuitMessage(0); break; default: return ::DefWindowProc(hWnd, msg, wParam, lParam); } return 0; }
效果:
参考资料:http://baike.baidu.com/view/1329156.htm
本文地址:/article/5259784.html
相关文章推荐
- windows笔记-API实现透明窗体
- windows笔记-API实现透明窗体
- Windows 中透明窗体与系统托盘实现详解
- Windows 界面:透明窗体的实现
- 透明窗体实现 - C++ & MFC & API
- AlphaBlend实现的透明PNG窗体
- iPhone开发笔记(13)调用GoogleMap API实现地理逆向编码
- Qt Widget 利用 Qt4.5 实现酷炫透明窗体
- Linux总结笔记6-配置Samba服务实现Linux和Windows之间文件共享
- Qt实现透明无边框,无关闭按钮,带自定义图片的窗体实例代码
- 另类的实现透明窗体
- boost.asio 学习笔记05——asio的windows实现
- 【笔记】理解Windows窗体产生的机制
- VC透明窗体的实现
- Swing 透明窗体实现
- Windows录音API学习笔记--转
- windows 下实现函数打桩:拦截API方式
- windows内核原理与实现学习笔记 (一) windows 系统结构
- 在Win32API窗体下实现透明背景
- boost.asio 学习笔记05——asio的windows实现