WPF中打造半透明窗口效果 - [WPF开发]
2011-08-24 15:23
344 查看
自Windows Vista起,Windows的桌面效果就增加了对Aero透明玻璃效果的支持,系统默认的话只是对标题栏或者菜单栏进行半透明处理,如果想实现整个窗口都Aero化的话,得引用一个系统DLL来实现。首先看效果图:
这个效果是通过DWM(Destop Window Manager)中的一个API来实现的,关键的代码如下:
1 private void ExtendAeroGlass(Window window)
2 {
3 try
4 {
5 // 为WPF程序获取窗口句柄
6 IntPtr mainWindowPtr = new WindowInteropHelper(window).Handle;
7 HwndSource mainWindowSrc = HwndSource.FromHwnd(mainWindowPtr);
8 mainWindowSrc.CompositionTarget.BackgroundColor = Colors.Transparent;
9
// 设置Margins
MARGINS margins = new MARGINS();
// 扩展Aero Glass
margins.cxLeftWidth = -1;
margins.cxRightWidth = -1;
margins.cyTopHeight = -1;
margins.cyBottomHeight = -1;
int hr = DwmExtendFrameIntoClientArea(mainWindowSrc.Handle, ref margins);
if (hr < 0)
{
MessageBox.Show("DwmExtendFrameIntoClientArea Failed");
}
}
catch (DllNotFoundException)
{
Application.Current.MainWindow.Background = Brushes.White;
}
}
[StructLayout(LayoutKind.Sequential)]
public struct MARGINS
{
public int cxLeftWidth;
public int cxRightWidth;
public int cyTopHeight;
public int cyBottomHeight;
};
[DllImport("DwmApi.dll")]
public static extern int DwmExtendFrameIntoClientArea(
IntPtr hwnd,
ref MARGINS pMarInset);
从代码中得知,我们需要引用一个DwmApi.dll文件,然后定义一个函数去实现拓展Aero区域,从而实现整个窗口的Aero化。
2、原文出处:http://www.cnblogs.com/gnielee/archive/2010/10/04/windows7-extend-aero-glass.html
这个效果是通过DWM(Destop Window Manager)中的一个API来实现的,关键的代码如下:
1 private void ExtendAeroGlass(Window window)
2 {
3 try
4 {
5 // 为WPF程序获取窗口句柄
6 IntPtr mainWindowPtr = new WindowInteropHelper(window).Handle;
7 HwndSource mainWindowSrc = HwndSource.FromHwnd(mainWindowPtr);
8 mainWindowSrc.CompositionTarget.BackgroundColor = Colors.Transparent;
9
// 设置Margins
MARGINS margins = new MARGINS();
// 扩展Aero Glass
margins.cxLeftWidth = -1;
margins.cxRightWidth = -1;
margins.cyTopHeight = -1;
margins.cyBottomHeight = -1;
int hr = DwmExtendFrameIntoClientArea(mainWindowSrc.Handle, ref margins);
if (hr < 0)
{
MessageBox.Show("DwmExtendFrameIntoClientArea Failed");
}
}
catch (DllNotFoundException)
{
Application.Current.MainWindow.Background = Brushes.White;
}
}
[StructLayout(LayoutKind.Sequential)]
public struct MARGINS
{
public int cxLeftWidth;
public int cxRightWidth;
public int cyTopHeight;
public int cyBottomHeight;
};
[DllImport("DwmApi.dll")]
public static extern int DwmExtendFrameIntoClientArea(
IntPtr hwnd,
ref MARGINS pMarInset);
从代码中得知,我们需要引用一个DwmApi.dll文件,然后定义一个函数去实现拓展Aero区域,从而实现整个窗口的Aero化。
参考资料:
1、关于WPF窗口的知识:http://www.cnblogs.com/libenqing/archive/2011/04/07/2007817.html2、原文出处:http://www.cnblogs.com/gnielee/archive/2010/10/04/windows7-extend-aero-glass.html
相关文章推荐
- 用wpf打造窗口的半透明效果
- Android开发窗口实现半透明效果
- 用WPF轻松打造iTunes CoverFlow效果
- iOS开发使用半透明模糊效果方法整理
- WPF—QQ界面(四):单击QQ昵称弹出个人简介窗口的效果实现
- 【FastDev4Android框架开发】Android Design支持库TabLayout打造仿网易新闻Tab标签效果(三十七)
- Android应用开发中半透明效果实现方案
- JAVA打造透明效果的窗口
- 用WPF轻松打造iTunes CoverFlow效果
- android高仿全民直播、多窗口管理、图标效果、开发框架,下拉上滑、UI框架等源码
- JavaScript 弹出登陆窗口背景半透明可拖动效果
- WPF 窗口边框阴影效果
- 如何去掉Win8任务栏半透明效果窗口风格保持一致
- vc++开发简单的半透明窗口程序示例
- Swing破局:打造半透明窗口
- 好玩的WPF第一弹:窗口抖动+边框阴影效果+倒计时显示文字
- wpf 客户端【JDAgent桌面助手】开发详解(三) 瀑布流效果实现与UI虚拟化优化大数据显示
- iOS开发使用半透明模糊效果方法整理
- 用WPF轻松打造iTunes CoverFlow效果
- Win10怎么修改命令提示符的不透明度让窗口变半透明效果