添加边框的毛玻璃效果
通过把毛玻璃效果从非客户区扩展到客户区,就可完成添加程序的毛玻璃效果,这个API是DwmExtendFrameIntoClientArea()。DwmExtendFrameIntoClientArea()接受两个参数:我们框架窗口的HWND和一个用于说明毛玻璃效果扩展到窗口四周多远的MARGINS结构。可在OnCreate()中调用这个API:
| LRESULT CMainFrame::OnCreate(LPCREATESTRUCT lpcs) { //在底部添加玻璃效果 MARGINS mar = {0}; mar.cyBottomHeight = 100; DwmExtendFrameIntoClientArea ( m_hWnd, &mar ); return 0; } |
但如果运行程序,看不到有任何变化:
这是因为毛玻璃效果依赖于窗口的透明度,为显示出玻璃效果,区域中像素(在本例中为客户区底部的100像素)的alpha值必须设置为0。最简单的方法是用一个黑画刷来绘制这个区域,它会把像素的颜色值(红、绿、蓝和alpha)设为0,可在OnEraseBkgnd()中完成:
| BOOL CMainFrame::OnEraseBkgnd ( HDC hdc ) { CDCHandle dc = hdc; CRect rcClient; GetClientRect(rcClient); dc.FillSolidRect(rcClient, RGB(0,0,0)); return true; } |
修改之后,框架窗口看起来像这样:
底部的100像素现在是毛玻璃效果了。
在毛玻璃区域添加文本
在窗口中添加毛玻璃效果是比较简单的部分,但要把自己的界面元素(UI)添加到毛玻璃之上,就有点难度了。因为必须一直保持像素的alpha值,所以就要用到那些可以理解并适当设置alpha的绘图API。坏消息是,GDI函数差不多全部不理会alpha--唯一剩下的API则为带有SRCCOPY光栅操作的BilBlt()函数了,因此,程序必须使用GDI+或主题API来进行绘图,这些API都是时刻不忘alpha的。
在Vista中,有关毛玻璃的效果一般用在表示程序状态的区域(取代了通用控件中的状态栏),例如,Windows Media Player 11就在窗口底部的毛玻璃区域显示播放控制与当前歌曲信息:

以下,将演示怎样在毛玻璃区域上绘制文本,并怎样在文本上添加发光效果,以便文本在任何背景上都方便阅读。文字:http://www.qqread.com/cpp/d257217.html
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- C/C++技术专题 (1635篇文章)
- Windows Vista 专区 (4602篇文章)
- Windows Vista系统新特性 (4602篇文章)
- Windows Vista频道 (4602篇文章)
- Vista多种桌面显示效果 (92篇文章)
- 最新系统 (4602篇文章)
- 用C语言编写Windows服务程序的五个步骤 (607次浏览)
- TCP/IP Winsock编程要点 (571次浏览)
- 新手看招 Linux操作系统下C++编程初探 (563次浏览)
- Visual C++实现Flash动画播放 (554次浏览)
- C++ 虚基类 (506次浏览)
- 用Visual C++在单文档界面中创建视图 (335次浏览)
- COM 组件设计与应用(一)起源及复合文件 (140次浏览)
- C++ Builder 初学问与答(四) (118次浏览)
- C程序实现汉字内码与GB码 (115次浏览)
- 确定一个应用程序是否没有响应 (115次浏览)





