He creado un clon de exposición para Vista que algunas veces necesita restaurar una ventana minimizada. He logrado hacer esto con la función SetWindowPlacement. El problema es que esto también repinta la ventana que se ve como basura después de que la ventana se deslizó suavemente en la pantalla.Cómo restablecer la ventana minimizada sin parpadeo
Este es el código que utilizo para traer una ventana a la parte superior y darle el foco:
private static void ActivateWindow(IntPtr windowToShow)
{
RectAPI r = new RectAPI();
Win32.GetWindowRect(windowToShow, ref r);
if (r.top == -32000) //r.top is -32000 if the window is in minimized state
{
WINDOWPLACEMENT wp = new WINDOWPLACEMENT();
Win32.GetWindowPlacement(windowToShow, ref wp);
if (wp.flags == WindowPlacementFlags.WPF_RESTORETOMAXIMIZED)
wp.showCmd = cmdShow.SW_SHOWMAXIMIZED;
else
wp.showCmd = cmdShow.SW_RESTORE;
Win32.SetWindowPlacement(windowToShow, ref wp);
}
Win32.SetForegroundWindow(windowToShow);
}
si lo uso en una ventana que ya está restaurado sólo llamará SetForegroundWindow y la ventana obtendrá a la parte superior del orden z y obtén el foco sin ningún parpadeo.
Pero si lo llamo en una ventana minimizada también tengo que usar SetWindowPlacement para traer de vuelta la ventana al estado restaurado. Esto es lo que hace que la ventana se repinte y parpadee:/
Tiene que haber una manera de restaurar una ventana minimizada sin el parpadeo porque el administrador de ventanas incorporado hace esto.