实现透明窗体
2012-11-22 16:31
399 查看
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
其实用简单的系统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
相关文章推荐
- vc中透明窗体的实现!!
- 透明窗体的实现
- vb实现透明窗体
- 透明窗体的又一实现
- c# 实现透明窗体,透明图片,透明按钮
- VC++窗体实现由完全透明到半透明的渐变显示
- mfc中如何实现窗体半透明 但是控件不透明
- Layered Window 透明窗体的实现总结
- MFC实现窗体透明
- VC实现透明窗体
- 透明窗体的实现/为窗体添加新的视图效果
- 用MFC实现窗体透明
- (转)xp下实现窗体透明特效/异形窗口SetLayeredWindowAttributes函数
- Qt 透明窗体实现
- Qt实现当鼠标移动到窗体上,窗体由半透明变为不透明
- QT实现不规则窗体和透明窗体
- 透明窗体 使用DWM实现Aero Glass效果
- 纯win32实现PNG图片透明窗体
- QT之桌面精灵实现(一) --- 透明窗体和图片绘制
- QT实现不规则窗体和透明窗体