Compartilhar via


Rolar o buffer de tela

Importante

Este documento descreve a funcionalidade da plataforma do console que não faz mais parte do nosso roteiro de ecossistema. Não recomendamos o uso desse 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 de multiplataforma. Você pode encontrar mais informações sobre essa decisão de design em nosso documento Console clássico versus terminal virtual.

A janela do console exibe uma parte do buffer de tela ativo. Cada buffer de tela mantém o próprio retângulo de janela atual que especifica as coordenadas das células de caracteres superior esquerda e inferior direita para exibição na janela do console. Para determinar o retângulo da janela atual de um buffer de tela, use a GetConsoleScreenBufferInfo. Quando um buffer de tela é criado, o canto superior esquerdo de sua janela fica 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 da tela do console. O retângulo da janela de um buffer de tela pode ser alterado 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 e altera a posição do retângulo da janela sem alterar o tamanho da janela. Para ver exemplos de rolagem do conteúdo da janela, confira Rolar a janela de um buffer de tela.

    screen buffer window panning around large buffer of content

  • Ao usar a função WriteFile para gravar em um buffer de tela com o modo de saída de quebra automática no fim da linha (EOL) habilitado, o retângulo da janela se desloca automaticamente, para que o cursor seja sempre exibido.

  • Quando a função SetConsoleCursorPosition especifica uma nova posição do cursor fora dos limites do retângulo da janela atual, o retângulo da janela se desloca 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 ativa pode se deslocar. 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 de 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 situações a seguir podem fazer com que o conteúdo do buffer da 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 gravação em um buffer de tela com quebra automática no modo de saída EOL habilitada, o conteúdo do buffer de tela do console rola automaticamente ao encontrar o final do buffer de tela do console. Essa rolagem descarta a linha superior do buffer de tela do console.

ScrollConsoleScreenBuffer especifica o retângulo do buffer da tela do console movido e as novas coordenadas superiores esquerdas para as quais o retângulo é copiado. Essa 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 de tela do console várias linhas para cima. O conteúdo das linhas superiores é descartado e as linhas inferiores são preenchidas com caractere e cor especificados.

screen buffer window scrolling content off top to discard

Os efeitos de ScrollConsoleScreenBuffer podem ser limitados por um retângulo de corte opcional para que o conteúdo do buffer de tela do console fora do retângulo de corte permaneça inalterado. O efeito do corte consiste em criar uma subjanela (o retângulo de corte) cujo conteúdo é rolado sem afetar o restante do buffer da tela do console. Para ver um exemplo de uso de ScrollConsoleScreenBuffer, confira Rolar o conteúdo de um buffer de tela.