Partilhar via


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 impedir que outras janelas se baseiem no retângulo de rastreamento sempre que o usuário move ou dimensiona uma janela. Os aplicativos podem usar o bloqueio para impedir o desenho se realizarem operações de movimentação ou dimensionamento semelhantes 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 se aplica à janela especificada e a todas as janelas filho. 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. Considerando isso, o aplicativo pode continuar a desenhar na janela, mas toda a saída é recortada. 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 for definido, o aplicativo poderá usar a 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 acompanhamento 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 filho, forçando uma mensagem de WM_PAINT eventual. 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.