最近我发现了如何让 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 控件中的文本不透明,同时使边框半透明?
更改文本前景色这是我认为唯一的方法