vc 实现透明窗口和不规则窗口
来源:互联网 发布:淘宝大学在哪里 编辑:程序博客网 时间:2024/05/16 06:25
做一个vc项目的时候,用到了不规则-透明窗口,中间走了几个弯路,在此总结一下:
相关的函数:
1
int SetWindowRgn( HWND hWnd, // handle to window HRGN hRgn, // handle to region BOOL bRedraw // window redraw option);
这个函数,没有太多的限制,只要hRgn正确,效果就会出现,但是有个缺点,就是使用该函数制作的不规则窗口可能出现锯齿
示例:
HRGN hRgn = CreateEllipticRgn(0,0,100,100);SetWindowRgn(hwnd, hRgn, TRUE);
2BOOL SetLayeredWindowAttributes(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
这个函数限制较大,它只能用于非child窗口,适合于背景为png图片的不规则窗口,同样可能会有锯齿出现,但是可以放控件。
示例,原始效果:
执行
// Set WS_EX_LAYERED on this window SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);
// Make this window 70% alpha SetLayeredWindowAttributes(hwnd, RGB(255,255,255), (255 * 70) / 100, LWA_ALPHA|LWA_COLORKEY);
效果:
3
BOOL UpdateLayeredWindow( HWND hwnd, HDC hdcDst, POINT *pptDst, SIZE *psize, HDC hdcSrc, POINT *pptSrc, COLORREF crKey, BLENDFUNCTION *pblend, DWORD dwFlags);
这个函数同样可以实现透明-不规则窗口,但是同样只适用于非child窗口,但是它可以抗锯齿。
由于该函数改变了窗口的绘制机制,因此使用了该函数的窗口是不会收到WM_PAINT消息的,因此无法放置控件。
示例:
Image image(L"apple.png"); Bitmap bitmap(100,100); Graphics tg(&bitmap); tg.Clear(Color(0,255, 255, 255)); tg.DrawImage(&image, Rect(0,0,100,100), 0,0,image.GetWidth(), image.GetHeight(), UnitPixel); HBITMAP hBitmap = NULL; bitmap.GetHBITMAP(Color(0,0,0), &hBitmap); HDC hdc = GetDC(hwnd); HDC hdcMem = CreateCompatibleDC(hdc); SelectObject(hdcMem, hBitmap); POINT ptDest = {0,0}; POINT ptSrc = {0,0}; SIZE size = {100,100}; BLENDFUNCTION blend; blend.AlphaFormat = AC_SRC_ALPHA; blend.BlendFlags = 0; blend.BlendOp = AC_SRC_OVER; blend.SourceConstantAlpha = 255 * 70 / 100;SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED); UpdateLayeredWindow(hwnd, hdc, &ptDest, &size, hdcMem, &ptSrc, RGB(0,0,0), &blend, LWA_ALPHA|LWA_COLORKEY); DeleteDC(hdcMem); ReleaseDC(hwnd, hdc);
效果:
0 0
- vc 实现透明窗口和不规则窗口
- 透明和不规则 Swing 窗口
- 透明和不规则 Swing 窗口
- 透明和不规则 Swing 窗口
- 透明和不规则 Swing 窗口
- Swing不规则窗口和窗口透明
- 用VC++实现不规则窗口
- VC++实现不规则窗口说明
- 用VC++实现不规则窗口
- VC++实现不规则窗口说明
- VC实现透明窗口
- 不规则透明窗口
- Java 透明和不规则 Swing 窗口
- Java 透明和不规则 Swing 窗口
- VC如何实现透明窗口
- VC如何实现透明窗口
- VC中实现不规则对话框(窗口)
- VC创建不规则窗口
- Oracle单行函数
- iOS实现点击按钮,跳转到与mian.storyboard 中与ViewController 关联的页面
- linux 从服务器上copy文件到本地
- Java对象的序列化和反序列化
- 互联网产品经理的工作职责
- vc 实现透明窗口和不规则窗口
- Flume-ng 1.6.0+ Elasticsearch 1.7.2+ Kibana4 日志收集分析系统环境搭建及介绍
- 常用java代理方法
- iOS 文件操作(NSFileManager)结合相册选取、保存、和读取
- Linux系统的系统信息查看方式
- Linux查看系统配置常用命令
- 08 连连看
- java jdbc连接数据库的完整步骤
- 笔试