Agora, acho que descobri o motivo, mas não tenho a menor ideia de como corrigi-lo.
Para uma janela maximizada minimizada (responsiva ou não), se eu clicar com o botão direito do mouse no botão da barra de tarefas e selecionar "Restaurar" duas vezes, a janela se tornará não minimizada e se tornará não maximizada. Isso pode ser o que está acontecendo na questão.
Se eu saí clique em um botão da barra de tarefas, o Explorer verificará o estado atual da janela. Se estiver minimizado, uma mensagem "Restaurar" será enviada para ele. Se estiver aparecendo, mas em segundo plano, será exibido. Se já estiver em primeiro plano, será minimizado.
Quando a janela minimizada é responsiva, clicar no botão da barra de tarefas a exibe. Se eu clicar novamente, o Explorer notará que a janela já está em primeiro plano e a minimizará novamente.
No entanto, quando a janela não responde, ela não responde à mensagem "Restaurar" e fica presa no estado minimizado. Se eu clicar no botão da barra de tarefas duas vezes, duas mensagens "Restaurar" ficarão na fila, já que o Explorer sempre verá a janela como minimizada. Quando a janela finalmente fica ativa, ela começa a processar as mensagens em espera. A primeira "Restauração" traz a janela para cima e a segunda restaura a janela para o estado não maximizado.
O problema subjacente é que "Minimized" e "Maximized" devem ser duas propriedades não relacionadas de uma janela, mas o Windows as mistura e usa o mesmo "Restore" ( SW_RESTORE
) para limpá-las.
Até agora não conheço nenhuma solução para corrigir o comportamento. Eu tentei monitorar esses "restaurações" (globalmente enganchando APIs como PostMessage
e verificando se msg == WM_SYSCOMMAND
), sem sucesso.