DrawAnimatedRects (user32)
Last changed: -87.0.250.181

.
Summary

C# Signature:

[DllImport("user32.dll")]
static extern bool DrawAnimatedRects(IntPtr hwnd, int idAni,
   [In] ref RECT lprcFrom, [In] ref RECT lprcTo);

User-Defined Types:

IDANI_

Notes:

Only the IDANI_CAPTION constant will result in any animation. Any other constants have not been implemented on any Windows platform!

Tips & Tricks:

Since only IDANI_CAPTION is implemented, to get the effect of IDANI_OPEN, simply swap the lprcFrom and lprcTo rectangles, but still specify the IDANI_CAPTION constant.

Sample Code:

    [StructLayout(LayoutKind.Sequential)]
    struct RECT {
      public RECT(System.Drawing.Rectangle rectangle) {
    Left = rectangle.Left;
    Top = rectangle.Top;
    Right = rectangle.Right;
    Bottom = rectangle.Bottom;
      }
      public RECT(System.Drawing.Point location, System.Drawing.Size size) {
    Left = location.X;
    Top = location.Y;
    Right = location.X + size.Width;
    Bottom = location.Y + size.Height;
      }
      public Int32 Left;
      public Int32 Top;
      public Int32 Right;
      public Int32 Bottom;
    }

    [DllImport("user32.dll")]
    static extern bool DrawAnimatedRects(IntPtr hwnd, int idAni, [In] ref RECT lprcFrom, [In] ref RECT lprcTo);

    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

    [DllImport("user32.dll")]
    static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);

    static public void ShowHideAnimated(System.Windows.Forms form, System.Boolean show)
    {
      RECT from = new RECT(form.Location, form.Size);
      RECT to;

      IntPtr hWnd = FindWindowEx(FindWindow("Shell_TrayWnd", null), IntPtr.Zero, "TrayNotifyWnd", null);

      if (hWnd != IntPtr.Zero) {
    GetWindowRect(hWndC, out to);
      }
      else {
    to.Left = SystemInformation.VirtualScreen.Right - this.Width;
    to.Top = SystemInformation.VirtualScreen.Bottom - SystemInformation.CaptionHeight - (SystemInformation.FrameBorderSize.Height * 2);
    to.Right = SystemInformation.VirtualScreen.Right;
    to.Bottom = SystemInformation.VirtualScreen.Bottom;
      }

      if (show) {
    DrawAnimatedRects(this.Handle, IDANI_CAPTION, ref to, ref from);
    form.Show();
      }
      else {
    form.Hide();
    DrawAnimatedRects(this.Handle, IDANI_CAPTION, ref from, ref to);
      }
    }

Alternative Managed API:

Do you know one? Please contribute it!

Documentation