Я сделал клон экспозиции для Vista, который иногда должен восстанавливать свернутое окно.
Мне удалось сделать это с помощью функции SetWindowPlacement.
Проблема в том, что это также перерисовывает окно, которое выглядит как дерьмо, после того, как окно красиво скользит в экран.
Это код, который я использую, чтобы вывести окно наверх и выделить его:
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);
}
Если я использую его в уже восстановленном окне, оно вызовет только SetForegroundWindow, и окно попадет в верхнюю часть z-порядка и получит фокус без какого-либо мерцания.
Но если я вызываю его в свернутом окне, я также должен использовать SetWindowPlacement, чтобы вернуть окно в восстановленное состояние. Вот что заставляет окно перекрашиваться и мерцать: /
Должен быть способ восстановить свернутое окно без мерцания, потому что встроенный оконный менеджер делает это.