关于VISTAios毛玻璃效果实现求助

关于VISTA毛玻璃效果求助【photoshop吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,086,086贴子:
关于VISTA毛玻璃效果求助收藏
快试试吧,可以对自己使用挽尊卡咯~◆◆
请问如何让玻璃图层本身具有模糊效果,而不是像网上流传的将背景图层模糊的做法。望高手解答,谢谢
PS的模糊只是颜色发散,还打不到物理模糊的效果
登录百度帐号他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)请问毛玻璃效果怎么实现?
[问题点数:100分]
请问毛玻璃效果怎么实现?
[问题点数:100分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2014年4月 Delphi大版内专家分月排行榜第三2014年3月 Delphi大版内专家分月排行榜第三2013年5月 Delphi大版内专家分月排行榜第三2013年1月 Delphi大版内专家分月排行榜第三2010年11月 Delphi大版内专家分月排行榜第三2009年12月 Delphi大版内专家分月排行榜第三2009年11月 Delphi大版内专家分月排行榜第三
2014年4月 Delphi大版内专家分月排行榜第三2014年3月 Delphi大版内专家分月排行榜第三2013年5月 Delphi大版内专家分月排行榜第三2013年1月 Delphi大版内专家分月排行榜第三2010年11月 Delphi大版内专家分月排行榜第三2009年12月 Delphi大版内专家分月排行榜第三2009年11月 Delphi大版内专家分月排行榜第三
2005年12月 总版技术专家分月排行榜第三
2017年3月 C++ Builder大版内专家分月排行榜第一2015年5月 C++ Builder大版内专家分月排行榜第一2015年4月 C++ Builder大版内专家分月排行榜第一2015年3月 C++ Builder大版内专家分月排行榜第一2015年1月 C++ Builder大版内专家分月排行榜第一2014年12月 C++ Builder大版内专家分月排行榜第一2014年11月 C++ Builder大版内专家分月排行榜第一2014年10月 C++ Builder大版内专家分月排行榜第一2014年9月 C++ Builder大版内专家分月排行榜第一2014年8月 C++ Builder大版内专家分月排行榜第一2014年7月 C++ Builder大版内专家分月排行榜第一2014年6月 C++ Builder大版内专家分月排行榜第一2014年5月 C++ Builder大版内专家分月排行榜第一2014年4月 C++ Builder大版内专家分月排行榜第一2014年3月 C++ Builder大版内专家分月排行榜第一2014年2月 C++ Builder大版内专家分月排行榜第一2014年1月 C++ Builder大版内专家分月排行榜第一2013年12月 C++ Builder大版内专家分月排行榜第一2013年10月 C++ Builder大版内专家分月排行榜第一2013年9月 C++ Builder大版内专家分月排行榜第一2013年8月 C++ Builder大版内专家分月排行榜第一2013年7月 C++ Builder大版内专家分月排行榜第一2013年6月 C++ Builder大版内专家分月排行榜第一2013年5月 C++ Builder大版内专家分月排行榜第一2013年4月 C++ Builder大版内专家分月排行榜第一2013年3月 C++ Builder大版内专家分月排行榜第一2013年2月 C++ Builder大版内专家分月排行榜第一2013年1月 C++ Builder大版内专家分月排行榜第一2012年12月 C++ Builder大版内专家分月排行榜第一2012年11月 C++ Builder大版内专家分月排行榜第一2012年10月 C++ Builder大版内专家分月排行榜第一2012年9月 C++ Builder大版内专家分月排行榜第一2012年8月 C++ Builder大版内专家分月排行榜第一2012年7月 C++ Builder大版内专家分月排行榜第一2012年6月 C++ Builder大版内专家分月排行榜第一2012年5月 C++ Builder大版内专家分月排行榜第一2012年4月 C++ Builder大版内专家分月排行榜第一2012年3月 C++ Builder大版内专家分月排行榜第一2012年2月 C++ Builder大版内专家分月排行榜第一2011年11月 C++ Builder大版内专家分月排行榜第一2011年10月 C++ Builder大版内专家分月排行榜第一2011年9月 C++ Builder大版内专家分月排行榜第一2011年7月 C++ Builder大版内专家分月排行榜第一2011年6月 C++ Builder大版内专家分月排行榜第一2011年5月 C++ Builder大版内专家分月排行榜第一2011年4月 C++ Builder大版内专家分月排行榜第一2011年3月 C++ Builder大版内专家分月排行榜第一2011年2月 C++ Builder大版内专家分月排行榜第一2011年1月 C++ Builder大版内专家分月排行榜第一2010年12月 C++ Builder大版内专家分月排行榜第一2010年11月 C++ Builder大版内专家分月排行榜第一2010年9月 C++ Builder大版内专家分月排行榜第一2010年8月 C++ Builder大版内专家分月排行榜第一2010年7月 C++ Builder大版内专家分月排行榜第一2010年6月 C++ Builder大版内专家分月排行榜第一2010年2月 C++ Builder大版内专家分月排行榜第一2009年12月 C++ Builder大版内专家分月排行榜第一2009年11月 C++ Builder大版内专家分月排行榜第一2009年10月 C++ Builder大版内专家分月排行榜第一2009年9月 C++ Builder大版内专家分月排行榜第一2009年8月 C++ Builder大版内专家分月排行榜第一2009年7月 C++ Builder大版内专家分月排行榜第一2009年6月 C++ Builder大版内专家分月排行榜第一2009年5月 C++ Builder大版内专家分月排行榜第一2009年4月 C++ Builder大版内专家分月排行榜第一2009年3月 C++ Builder大版内专家分月排行榜第一2008年7月 C++ Builder大版内专家分月排行榜第一2007年4月 C++ Builder大版内专家分月排行榜第一2007年3月 C++ Builder大版内专家分月排行榜第一2006年11月 C++ Builder大版内专家分月排行榜第一2006年1月 C++ Builder大版内专家分月排行榜第一2005年12月 C++ Builder大版内专家分月排行榜第一2005年11月 C++ Builder大版内专家分月排行榜第一2005年10月 C++ Builder大版内专家分月排行榜第一2005年9月 C++ Builder大版内专家分月排行榜第一2004年3月 C++ Builder大版内专家分月排行榜第一2003年12月 C++ Builder大版内专家分月排行榜第一2003年9月 C++ Builder大版内专家分月排行榜第一
2017年11月 Delphi大版内专家分月排行榜第二2017年4月 Delphi大版内专家分月排行榜第二2017年1月 Delphi大版内专家分月排行榜第二2014年10月 Delphi大版内专家分月排行榜第二2014年9月 Delphi大版内专家分月排行榜第二
匿名用户不能发表回复!|利用.net(C#)在Vista磨砂玻璃窗口上正确画出文字和图片(GDI 版)
我的图书馆
利用.net(C#)在Vista磨砂玻璃窗口上正确画出文字和图片(GDI 版)
本文欢迎转载,但请标明出处.
作者: 吴滂
&貌似Windows Vista昨天正式发布了,也是该写写东西的时候啦,其实这篇文章我很早就写了的,不过是用E文写的,发表在codeproject上:
当时用的是Windows Vista Beta2 做的测试,演示有些地方已经和现在正式版(或者RC1)的系统不一样,不过功能还是照样能实现的。
现在我们就直入正题吧。Windows Vista给我们带来了磨砂玻璃的半透明窗体边框,其实这个效果是可以扩展到整个窗口区域的,让整个窗体成为一个“玻璃片”,效果就像在Vista下按alt+Tab键后看到的切换窗口一样。要达到这个效果,我们得借助于Vista提供的一组新API :DWM(Desktop Windows Manager) API。主要用到以下几个函数:DwmIsCompositionEnabled 和 DwmExtendFrameIntoClientArea.
当然,调用API的话,P/Invoke代码不可避免,这是这两个API的C#引用声明:
[System.Runtime.InteropServices.DllImport("dwmapi.dll")]public&extern&static&int&DwmIsCompositionEnabled(ref&int&en&)&;&&//该函数用于判断Aero合成效果是否打开,否则无法看到磨砂效果
[System.Runtime.InteropServices.DllImport("dwmapi.dll")]public&extern&static&int&DwmExtendFrameIntoClientArea(IntPtr&hwnd,&ref&MARGINS&margin&)&;&&//该函数用于扩展玻璃区域
要注意DwmExtendFrameIntoClientArea函数最后一个参数为MARGINS 结构体,用于确定要扩展的玻璃区域距离窗体上下左右边框的距离大小,它的定义为:
public&struct&MARGINS{&&&&&public&int&m_&&&&&public&int&m_&&&&&public&int&m_&&&&&public&int&m_buttom};
如果你要把整个窗口都变成玻璃,只需把MARGINS所有成员设为-1。下面是一段示例代码:
int&en=<span style="COLOR: #;MARGINS&mg=new&MARGINS();mg.m_Buttom&=&-<span style="COLOR: #;mg.m_Left&=&-<span style="COLOR: #;mg.m_Right&=&-<span style="COLOR: #;mg.m_Top&=&-<span style="COLOR: #&;//确保你使用的是Vistaif&(System.Environment.OSVersion.Version.Major&&=&<span style="COLOR: #)&&&&&&&&&&&&&{&&&&DwmIsCompositionEnabled(ref&en);&&&&//检测Aero合成已经被打开&&&&if(en&<span style="COLOR: #)&&&&...{&&&&&&&&&&DwmExtendFrameIntoClientArea(this.Handle,&ref&mg);&&&&}else...{&&&&&&&&&&MessageBox.Show("Desktop&Composition&is&Disabled!");&&&&}}else{&&&&&MessageBox.Show("Please&run&this&on&Windows&Vista.");}
如果你这时按下F5,会发现看不到任何特殊的效果:窗体还是和原来一样。那是因为系统在本来应该是玻璃的区域自动用默认背景色填充了,以致于看不到效果。这个时候,我们必须在Paint事件上做写些脚,把整个窗体用纯黑填充(RGB(0,0,0)刚好和ARGB的100%透明有着一样的bit pattern ),本来还有一个办法能看到效果,就是设置透明颜色让背景透明,但是这个方法已经在RC1的Vista之后不可用,就不做介绍了。
void&Form1_Paint(object&sender,&PaintEventArgs&e)&&&&&&&&{&&&&&&&&&&&&//throw&new&Exception("The&method&or&operation&is&not&implemented.");&&&&&&&&&&&&SolidBrush&&&&&&&&&&&&&bsh&=&new&SolidBrush(Color.FromArgb(Convert.ToInt32(bgAlpha.Text&),Color.Black&));&&&&&&&&&&&&Graphics&g&=&e.G&&&&&&&&&&&&g.FillRectangle(bsh,&this.pictureBox2.ClientRectangle&);&&//pictureBox2铺满整个窗体&&&&&&&&&&&&bsh.Dispose();&&&&&&&&}
这样就可以看到效果:
实现了玻璃效果后你很快会发现问题:图片框和Label不能正确的显示文字,文本框文字的黑色部分也会变成玻璃效果:
用Graphics的DrawString也无法在玻璃上面画出正常的文本。为了能正确的画出文本,我们不能直接使用Graphic对象,而必须先把要画的字“写”在一个Path对象上面,最后再把Path用Graphics.FillPath填充到窗体上:
Graphics&g&=&this.CreateGraphics();GraphicsPath&blackfont&=&new&GraphicsPath();SolidBrush&brsh&=&new&SolidBrush(Color.White);blackfont.AddString("Hello&Vista",&new&FontFamily("Tahoma",(int)FontStyle.Regular,&<span style="COLOR: #,&new&Point(<span style="COLOR: #,&<span style="COLOR: #),&StringFormat.GenericDefault);//SmoothingMode&是必须的,&否则会看到文本的锯齿边缘g.SmoothingMode&=&System.Drawing.Drawing2D.SmoothingMode.HighQuality&&;&&&g.FillPath(brsh,&blackfont);&&&&//用白色填充文本
当然,如果你只是画图片到玻璃区域,Graphics的DrawImage就足够了:
当然,这种画文本的方法并不是Windows的“标准方法”,至于如何利用API在玻璃区域上画出像标题文字一样的带白色渐变效果的文本,我会在后面的文章里介绍,这里先给大家看看效果图:
TA的最新馆藏
喜欢该文的人也喜欢Fireworks表现Vista毛玻璃朦胧效果_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Fireworks表现Vista毛玻璃朦胧效果
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 ios毛玻璃效果实现 的文章

 

随机推荐