Bloqueio de atualização de janela
Um bloqueio de atualização de janela é uma suspensão temporária do desenho em uma janela. O sistema usa o bloqueio para evitar que outras janelas se desenhem sobre o retângulo de rastreamento sempre que o usuário se move ou dimensiona uma janela. Os aplicativos podem usar a fechadura para evitar o desenho se realizarem operações semelhantes de movimentação ou dimensionamento com suas próprias janelas.
Um aplicativo usa a função LockWindowUpdate para definir ou limpar um bloqueio de atualização de janela, especificando a janela a ser bloqueada. O bloqueio aplica-se à janela especificada e a todas as suas janelas filhas. Quando o bloqueio é definido, as funções GetDC e BeginPaint retornam um contexto de dispositivo de exibição com uma região visível vazia. Dado isso, o aplicativo pode continuar a desenhar na janela, mas toda a saída é cortada. O bloqueio persiste até que o aplicativo o limpe chamando LockWindowUpdate, especificando NULL para a janela. Embora LockWindowUpdate force a região visível de uma janela a ficar vazia, a função não torna a janela especificada invisível e não limpa o bit de estilo WS_VISIBLE.
Depois que o bloqueio é definido, o aplicativo pode usar o função GetDCEx, com o valor DCX_LOCKWINDOWUPDATE, para recuperar um contexto de dispositivo de exibição para desenhar sobre a janela bloqueada. Isso permite que o aplicativo desenhe um retângulo de rastreamento ao processar mensagens de teclado ou mouse. O sistema usa esse método quando o usuário move e dimensiona janelas. GetDCEx recupera o contexto do dispositivo de exibição do cache de contexto do dispositivo de exibição, portanto, o aplicativo deve liberar o contexto do dispositivo o mais rápido possível após o desenho.
Enquanto um bloqueio de atualização de janela é definido, o sistema cria um retângulo delimitador acumulado para cada janela bloqueada. Quando o bloqueio é limpo, o sistema usa esse retângulo delimitador para definir a região de atualização para a janela e suas janelas filhas, forçando uma eventual mensagem WM_PAINT. Se o retângulo delimitador acumulado estiver vazio (ou seja, se nenhum desenho tiver ocorrido enquanto o bloqueio foi definido), a região de atualização não será definida.