在WinForms中使用Aero Blur时,TextBox文本变得透明

时间:2017-10-16 16:17:20

标签: c# windows winforms aero aero-glass

最近,我发现了如何让Aero Blur在Windows Vista,7和10中以无边框形式工作。我使用以下功能实现了这一目标:

private void UpdateAeroBlur() {
    if (!SupportsAeroBlur) //do not do anything if XP or older
        return;
    else if (useSetWindowComposition) { //true if SetWindowCompositionAttribute function
                                        //exists in user32.dll
        AccentPolicy accent = new AccentPolicy();
        accent.AccentState = enableAeroBlur ? AccentState.ENABLE_BLURBEHIND : AccentState.DISABLED;
        WindowCompositionAttributeData data = new WindowCompositionAttributeData();
        data.Attribute = DwmWindowAttribute.ACCENT_POLICY;
        data.SizeOfData = AccentPolicy.Size;
        unsafe
        {
            data.Data = new IntPtr(&accent);
        }
        NativeApi.SetWindowCompositionAttribute(Handle, ref data);
    }
    DWM_BLURBEHIND style = new DWM_BLURBEHIND() {
        dwFlags = DWM_BB.Enable,
        fEnable = true
    };
    NativeApi.DwmEnableBlurBehindWindow(Handle, ref style);
}

它设法使我的自定义表格的边框半透明!但是我得到了令人讨厌的副作用。

看看这个:

Aero Blur Demo

TextBox控件中的文本已变为透明,而使用消除锯齿文本GDI +绘制的按钮上的文本不透明。

我尝试拨打SetLayeredWindowAttributes并尝试使用LWA_ALPHA bAlpha = 255,然后尝试LWA_COLORKEY COLORREF归零,但问题仍然存在。

如何让TextBox控件中的文本不透明而边框保持半透明状态?

0 个答案:

没有答案