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

问题描述 投票:0回答:1

最近我发现了如何让 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);
}

它成功地使我的自定义表单的边框变得半透明!然而我遇到了一个恼人的副作用。

看这个:

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

我尝试调用 SetLayeredWindowAttributes 并尝试使用

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

如何使 TextBox 控件中的文本不透明,同时使边框半透明?

c# windows winforms aero aero-glass
1个回答
0
投票

更改文本前景色这是我认为唯一的方法

© www.soinside.com 2019 - 2024. All rights reserved.