private static void SetInternal(IntPtr handle, User32.AccentState accentState, bool showBorders = false, uint tintOpacity = 0) { var accent = new User32.AccentPolicy { AccentState = accentState, AccentFlags = (showBorders) ? User32.AccentFlags.DrawAllBorders : User32.AccentFlags.None, GradientColor = (_defaultTintOpacity << 24) | (_defaultTintBackgroundColor & 0xFFFFFF) }; var accentStructSize = Marshal.SizeOf(accent); var accentPtr = Marshal.AllocHGlobal(accentStructSize); Marshal.StructureToPtr(accent, accentPtr, false); var data = new User32.WindowCompositionAttribData(); data.Attribute = User32.WindowCompositionAttribute.WCA_ACCENT_POLICY; data.SizeOfData = accentStructSize; data.Data = accentPtr; var ret = User32.SetWindowCompositionAttribute(handle, ref data); Debug.Assert(ret == 0 || ret == 1); Marshal.FreeHGlobal(accentPtr); }
private static void SetAccentPolicy(IntPtr handle, User32.AccentPolicy policy) { var accentStructSize = Marshal.SizeOf(policy); var accentPtr = Marshal.AllocHGlobal(accentStructSize); Marshal.StructureToPtr(policy, accentPtr, false); var data = new User32.WindowCompositionAttribData(); data.Attribute = User32.WindowCompositionAttribute.WCA_ACCENT_POLICY; data.SizeOfData = accentStructSize; data.Data = accentPtr; var ret = User32.SetWindowCompositionAttribute(handle, ref data); Debug.Assert(ret == 0 || ret == 1); Marshal.FreeHGlobal(accentPtr); }