vc 实现透明窗口和不规则窗口
2015-09-30 10:54
405 查看
做一个vc项目的时候,用到了不规则-透明窗口,中间走了几个弯路,在此总结一下:
相关的函数:
1
相关的函数:
1
intSetWindowRgn( HWNDhWnd,//handletowindow HRGNhRgn,//handletoregion BOOLbRedraw//windowredrawoption );
这个函数,没有太多的限制,只要hRgn正确,效果就会出现,但是有个缺点,就是使用该函数制作的不规则窗口可能出现锯齿
示例:
HRGNhRgn=CreateEllipticRgn(0,0,100,100); SetWindowRgn(hwnd,hRgn,TRUE);
2BOOLSetLayeredWindowAttributes(
HWNDhwnd,
COLORREFcrKey,
BYTEbAlpha,
DWORDdwFlags
);
这个函数限制较大,它只能用于非child窗口,适合于背景为png图片的不规则窗口,同样可能会有锯齿出现,但是可以放控件。
示例,原始效果:
执行
//SetWS_EX_LAYEREDonthiswindow
SetWindowLong(hwnd,
GWL_EXSTYLE,
GetWindowLong(hwnd,GWL_EXSTYLE)|WS_EX_LAYERED);
//Makethiswindow70%alpha
SetLayeredWindowAttributes(hwnd,RGB(255,255,255),
(255*70)/100,LWA_ALPHA|LWA_COLORKEY);
效果:
3
BOOLUpdateLayeredWindow(
HWNDhwnd,
HDChdcDst,
POINT*pptDst,
SIZE*psize,
HDChdcSrc,
POINT*pptSrc,
COLORREFcrKey,
BLENDFUNCTION*pblend,
DWORDdwFlags
);
这个函数同样可以实现透明-不规则窗口,但是同样只适用于非child窗口,但是它可以抗锯齿。
由于该函数改变了窗口的绘制机制,因此使用了该函数的窗口是不会收到WM_PAINT消息的,因此无法放置控件。
示例:
Imageimage(L"apple.png");
Bitmapbitmap(100,100);
Graphicstg(&bitmap);
tg.Clear(Color(0,255,255,255));
tg.DrawImage(&image,Rect(0,0,100,100),
0,0,image.GetWidth(),image.GetHeight(),UnitPixel);
HBITMAPhBitmap=NULL;
bitmap.GetHBITMAP(Color(0,0,0),&hBitmap);
HDChdc=GetDC(hwnd);
HDChdcMem=CreateCompatibleDC(hdc);
SelectObject(hdcMem,hBitmap);
POINTptDest={0,0};
POINTptSrc={0,0};
SIZEsize={100,100};
BLENDFUNCTIONblend;
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);
效果:
相关文章推荐
- Java对象的序列化和反序列化
- 常用java代理方法
- js、css、img等浏览器缓存问题的2种解决方案
- 生成树
- linux 从服务器上copy文件到本地
- linux 启用指定用户登录,取消root ssh登录
- linux sed命令详解
- ASP.NET MVC (Razor)开发 <<周报与绩效考核系统>> 总结与分享
- Android 从硬件到应用程序:一步一步爬上去 6 -- 我写的APP测试框架层硬件服务(终点)
- java Junit 测试
- Oracle单行函数
- Blocks
- 【bzoj2145】【跳跳棋】【二分+lca】
- 1、checklistbox 用法总结 http://blog.sina.com.cn/s/blog_4cf58c9c010106mx.html
- php 和ios存cookie的问题
- Codeforces Round #322 C Developing Skills
- 第四次作业
- Fragment与Activity传递数据
- 笔记10
- 志同道合者为兄弟