【聚杰网VC】用C++品尝Vista美味:界面的毛玻璃效果
添加边框的毛玻璃效果
通过把毛玻璃效果从非客户区扩展到客户区,就可完成添加程序的毛玻璃效果,这个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像素现在是毛玻璃效果了。






