Partilhar via


Rolando o buffer de tela

Importante

Este documento descreve a funcionalidade da plataforma de console que não faz mais parte do nosso roteiro de ecossistema. Não recomendamos o uso deste conteúdo em novos produtos, mas continuaremos a oferecer suporte aos usos existentes por tempo indeterminado. Nossa solução moderna preferida se concentra em sequências de terminais virtuais para máxima compatibilidade em cenários multiplataforma. Você pode encontrar mais informações sobre essa decisão de design em nosso documento clássico de console versus terminal virtual.

A janela do console exibe uma parte do buffer de tela ativo. Cada buffer de tela mantém seu próprio retângulo de janela atual que especifica as coordenadas das células de caracteres superior esquerda e inferior direita a serem exibidas na janela do console. Para determinar o retângulo de janela atual de um buffer de tela, use GetConsoleScreenBufferInfo. Quando um buffer de tela é criado, o canto superior esquerdo de sua janela está no canto superior esquerdo do buffer de tela do console em (0,0).

O retângulo da janela pode mudar para exibir diferentes partes do buffer de tela do console. O retângulo de janela de um buffer de tela pode mudar nas seguintes situações:

  • Quando SetConsoleWindowInfo é chamado para especificar um novo retângulo de janela, ele rola a exibição do buffer de tela do console alterando a posição do retângulo da janela sem alterar o tamanho da janela. Para obter exemplos de rolagem do conteúdo da janela, consulte Rolando uma janela do buffer de tela.

    janela de buffer de tela movendo em torno de grande buffer de conteúdo

  • Ao usar a função WriteFile para gravar em um buffer de tela com o modo de saída wrap at end-of-line (EOL) ativado, o retângulo da janela muda automaticamente, para que o cursor seja sempre exibido.

  • Quando a função SetConsoleCursorPosition especifica uma nova posição do cursor que está fora dos limites do retângulo da janela atual, o retângulo da janela muda automaticamente para exibir o cursor.

  • Quando o usuário altera o tamanho da janela do console ou usa as barras de rolagem da janela, o retângulo da janela do buffer de tela ativo pode mudar. Essa alteração não é relatada como um evento de redimensionamento de janela no buffer de entrada.

Em cada uma dessas situações, o retângulo da janela se desloca para exibir uma parte diferente do buffer de tela do console, mas o conteúdo do buffer de tela do console permanece na mesma posição. As seguintes situações podem fazer com que o conteúdo do buffer de tela do console mude:

  • Quando a função ScrollConsoleScreenBuffer é chamada, um bloco retangular é copiado de uma parte de um buffer de tela para outra.
  • Ao usar WriteFile para gravar em um buffer de tela com wrap no modo de saída EOL habilitado, o conteúdo do buffer de tela do console rola automaticamente quando o final do buffer de tela do console é encontrado. Essa rolagem descarta a linha superior do buffer de tela do console.

ScrollConsoleScreenBuffer especifica o retângulo do buffer da tela do console que é movido e as novas coordenadas superiores esquerdas para as quais o retângulo é copiado. Esta função pode rolar uma parte ou todo o conteúdo do buffer de tela do console.

A ilustração mostra uma operação ScrollConsoleScreenBuffer que rola todo o conteúdo do buffer da tela do console por várias linhas. O conteúdo das linhas superiores é descartado e as linhas inferiores são preenchidas com um caractere e uma cor especificados.

janela do buffer de tela rolando o conteúdo para fora da parte superior para descartar

Os efeitos de ScrollConsoleScreenBuffer podem ser limitados especificando um retângulo de recorte opcional para que o conteúdo do buffer de tela do console fora do retângulo de recorte não seja alterado. O efeito do recorte é criar uma subjanela (o retângulo de recorte) cujo conteúdo é rolado sem afetar o resto do buffer de tela do console. Para obter um exemplo que usa ScrollConsoleScreenBuffer, consulte Rolando o conteúdo de um buffer de tela.