最近,我发现了如何让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控件中的文本不透明而边框保持半透明状态?