Пример #1
0
        /// <summary>
        /// Asynchronously fades from the current DWM color to <paramref name="newColor" />.
        /// </summary>
        /// <param name="newColor">The new color to fade to.</param>
        public static async Task BeginChangeColor(Color newColor, float duration = DURATION)
        {
            await Task.Run(() =>
            {
                int ticks = (int)(FRAMES_PER_SECOND * DURATION); // Round to the nearest whole step

                DwmColorParams p = new DwmColorParams();
                DwmpGetColorizationParameters(out p);

                Color startColor = Color.FromArgb((int)p.ColorizationColor);

                if (newColor == startColor)
                {
                    return;
                }

                ColorTransform ct = new ColorTransform(startColor, newColor, ticks);

                while (ct.Transform())
                {
                    if (p.ColorizationColor != (uint)ct.GetColor().ToArgb())
                    {
                        p.ColorizationColor     = (uint)ct.GetColor().ToArgb();
                        p.ColorizationAfterglow = p.ColorizationColor;
                        DwmpSetColorizationParameters(ref p, true);
                        Thread.Sleep((int)((1.00 / FRAMES_PER_SECOND) * 1000)); // Sleep for one "tick" (based on FPS).
                    }
                }
            });
        }
        /// <summary>
        /// Asynchronously fades from the current DWM color to <paramref name="newColor" />.
        /// </summary>
        /// <param name="newColor">The new color to fade to.</param>
        public static async Task BeginChangeColor(Color newColor, float duration = DURATION)
        {
            await Task.Run(() =>
            {
                int ticks = (int)(FRAMES_PER_SECOND * DURATION); // Round to the nearest whole step

                DwmColorParams p = new DwmColorParams();
                DwmpGetColorizationParameters(out p);

                Color startColor = Color.FromArgb((int)p.ColorizationColor);

                if (newColor == startColor)
                {
                    return;
                }

                ColorTransform ct = new ColorTransform(startColor, newColor, ticks);

                while (ct.Transform())
                {
                    if (p.ColorizationColor != (uint)ct.GetColor().ToArgb())
                    {
                        p.ColorizationColor = (uint)ct.GetColor().ToArgb();
                        p.ColorizationAfterglow = p.ColorizationColor;
                        DwmpSetColorizationParameters(ref p, true);
                        Thread.Sleep((int)((1.00 / FRAMES_PER_SECOND) * 1000)); // Sleep for one "tick" (based on FPS).
                    }
                }
            });
        }