- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个无边框、不可调整大小的 WPF 窗体(WindowStyle=None、AllowsTransparency=True、ResizeMode=NoResize),背景是半透明的。下面是在记事本上运行的半透明红色矩形窗体的图片:
但是,我希望背景变得模糊,就像 Aero glass 那样,除了没有所有花哨的窗口边框和带条纹的彩色背景 - 我想自己处理。这是我希望它看起来像的模型:
我怎样才能以最有效的方式实现这一目标?
WinForms 或 WPF 对我来说没问题。希望它应该使用与 Aero glass 相同的东西(我对它只在启用 Aero 的情况下工作很好),而不是像将下面的屏幕区域捕获为位图并对其进行模糊处理这样疯狂的事情。
这是我不想要的图片:
我知道这是可能的,我知道怎么做,但我不希望整个 Aero 玻璃窗口镶边、边框和标题栏或窗口具有用户设置的 Aero 玻璃颜色,只是模糊窗口/表单下方的任何内容的效果。
最佳答案
如果你想使用 Aero 模糊,那么你可以使用 DwmEnableBlurBehindWindow 接口(interface)。下面是一个利用它的示例派生窗口。
public class BlurWindow : Window
{
#region Constants
private const int WM_DWMCOMPOSITIONCHANGED = 0x031E;
private const int DWM_BB_ENABLE = 0x1;
#endregion //Constants
#region Structures
[StructLayout( LayoutKind.Sequential )]
private struct DWM_BLURBEHIND
{
public int dwFlags;
public bool fEnable;
public IntPtr hRgnBlur;
public bool fTransitionOnMaximized;
}
[StructLayout( LayoutKind.Sequential )]
private struct MARGINS
{
public int cxLeftWidth;
public int cxRightWidth;
public int cyTopHeight;
public int cyBottomHeight;
}
#endregion //Structures
#region APIs
[DllImport( "dwmapi.dll", PreserveSig = false )]
private static extern void DwmEnableBlurBehindWindow(IntPtr hwnd, ref DWM_BLURBEHIND blurBehind);
[DllImport( "dwmapi.dll" )]
private static extern int DwmExtendFrameIntoClientArea(IntPtr hWnd, ref MARGINS pMargins);
[DllImport( "dwmapi.dll", PreserveSig = false )]
private static extern bool DwmIsCompositionEnabled();
#endregion //APIs
#region Constructor
public BlurWindow()
{
this.WindowStyle = System.Windows.WindowStyle.None;
this.ResizeMode = System.Windows.ResizeMode.NoResize;
this.Background = Brushes.Transparent;
}
#endregion //Constructor
#region Base class overrides
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized( e );
if ( Environment.OSVersion.Version.Major >= 6 )
{
var hwnd = new WindowInteropHelper( this ).Handle;
var hs = HwndSource.FromHwnd( hwnd );
hs.CompositionTarget.BackgroundColor = Colors.Transparent;
hs.AddHook( new HwndSourceHook( this.WndProc ) );
this.InitializeGlass( hwnd );
}
}
#endregion //Base class overrides
#region Methods
#region InitializeGlass
private void InitializeGlass(IntPtr hwnd)
{
if ( !DwmIsCompositionEnabled() )
return;
// fill the background with glass
var margins = new MARGINS();
margins.cxLeftWidth = margins.cxRightWidth = margins.cyBottomHeight = margins.cyTopHeight = -1;
DwmExtendFrameIntoClientArea( hwnd, ref margins );
// initialize blur for the window
DWM_BLURBEHIND bbh = new DWM_BLURBEHIND();
bbh.fEnable = true;
bbh.dwFlags = DWM_BB_ENABLE;
DwmEnableBlurBehindWindow( hwnd, ref bbh );
}
#endregion //InitializeGlass
#region WndProc
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if ( msg == WM_DWMCOMPOSITIONCHANGED )
{
this.InitializeGlass( hwnd );
handled = false;
}
return IntPtr.Zero;
}
#endregion //WndProc
#endregion //Methods
}
这里是使用 BlurWindow 的片段。
var w = new BlurWindow();
w.Width = 100;
w.Height = 100;
w.MouseLeftButtonDown += (s1, e1) => {
((Window)s1).DragMove();
e1.Handled = true;
};
w.Background = new SolidColorBrush( Color.FromArgb( 75, 255, 0, 0 ) );
w.Show();
关于c# - 模糊半透明形式的背景(如 Aero 玻璃),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11386452/
我在 NSWindow 中有一个 NSView,NSWindow 是标准的 Mac 灰色/米色。 我想让 NSView 稍微半透明和灰色(例如 alpha 为 0.2 的灰色),以便 NSWindow
我对 openGL 中的 alpha 混合有疑问... 我尝试了一些绘制透明对象的方法...通过在绘制透明面之前禁用 GL_DEPTH_TEST 并在绘制透明面后再次重新启用 GL_DEPTH_TES
我将导航栏自定义为清除。所以我将backgroundImage设置为UIImage()并且isTranslucent = true。所以我遇到的问题是:这就是我在 xib 中设置的。现在 TopCon
我一直在研究这个,似乎唯一的方法是使用 UIActionSheet,问题是我的 UIActionSheet 只覆盖了一半的屏幕,我的代码是: MyViewController *myVC = [[my
我希望在我的主要 Activity 中使用半透明的状态栏和导航栏,而所有其他 Activity 都使用 Material 设计。 到目前为止我得到的是: if (Build.VERSION.SDK_I
我可以在不使用私有(private)方法等的情况下获得对 UIAlertView 的 backgroundImageView 的引用。但是我的 alpha 设置为 1.0 被忽略了。控件仍然有点半透明
我正在研究 UIWebView,我想要的是 webView 不要过度说唱 View 。 所以这就是问题所在。我设置了 UIWebView ,状态栏覆盖在内容上。 我该如何处理?我在制作 UIImage
我正在为一款小型 2d 游戏在其他图像之上绘制半透明图像。目前要混合图像,我正在使用此处找到的公式:https://en.wikipedia.org/wiki/Alpha_compositing#Al
我正在尝试将 Splash Screen 4 制作成 Win 应用程序。 我的设置: 表单边框样式设置为无。起始位置是屏幕中心。表单的背景图像设置为 PNG 文件,具有圆形边缘和“内置”投影。 在我设
(此问题发生在使用 Java 1.7.0_45 的 Mac OS X 10.10 上。在使用 Java 1.7.0_55 的 Windows 7 上我没有遇到此问题。) 我有一个半透明的“始终在最前面
如果您知道学习如何使用 Adobe Flash 为 iPhone 应用程序甚至 Air 应用程序创建此类效果的任何良好起点,那将会有很大帮助。 具体来说,我希望它不保存叠加层,只在用户从相机拍摄图
我有以下行: label.setBackground(new java.awt.Color(0, 150, 0, 50)); 我将它放在 MouseAdapter 中的 mouseRe
我正在制作幻灯片。我希望导航栏看起来与照片应用程序中的一样。我如何获得这种透明度? 我试过: - (void)drawRect:(CGRect)rect { [[UIColor clearCo
我试图在半透明的 div 上获取文本。这是在 Chrome 中,如果相关(即 Chrome 错误)。出于某种原因,每当文本位于 div 顶部(移动到负边距顶部)时,它也是部分透明的。 HTML 如下(
我在 NSVisualEffectView 上有 2 个 NSButton。第一个按钮图像是系统 NSEnterFullScreenTemplate 图像。第一个按钮上的图像是半透明的。 在第二个按钮
我想在RelativeLayout中创建一个RelativeLayout半透明。 它是页脚的项目。它始终可见,但我只想使其黑色的透明度为 50%。 我尝试过使用#11000000 Alpha chan
我正在尝试使用 Qt (C++) 应用程序跨操作系统完成以下任务。运行该程序后,会弹出一个新窗口,一个全屏 QWidget。现在我希望它是透明的/透明的,这样用户就不会真正看到它。在这个“层”上,用户
所以,我的目标是绘制具有半透明像素的 Sprite 。 首先,我使用仅渲染不透明像素的着色器渲染 Sprite 。然后,我禁用深度缓冲区写入并使用仅渲染半透明(或透明 Sprite )的着色器渲染相同
CSS .popup { z-index: 10000; filter: alpha(opacity=40); -moz-opacity: .40; backgroun
我正在尝试创建一个 lightbox effect在我的应用程序中。为实现这一点,我有一个 UserControl,其中一个面板代表半透明覆盖层,另一个面板托管所有必要的内容。 当我显示此 UserC
我是一名优秀的程序员,十分优秀!