Compartilhar via


Rolando o buffer de tela

Importante

Este documento descreve a funcionalidade da plataforma de console que não faz mais parte do roteiro do nosso ecossistema. Não recomendamos usar esse conteúdo em novos produtos, mas continuaremos a dar suporte aos usos existentes para o futuro indefinido. Nossa solução moderna preferida se concentra em sequências de terminal virtual para a máxima compatibilidade em cenários de plataforma cruzada. Você pode encontrar mais informações sobre essa decisão de design em nosso console clássico versus documento de 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 caractere superior esquerdo e inferior direito a serem exibidas na janela do console. Para determinar o retângulo da janela atual de um buffer de tela, use GetConsoleScreenBufferInfo. Quando um buffer de tela é criado, o canto superior esquerdo da janela fica no canto superior esquerdo do buffer de tela do console em (0,0).

O retângulo da janela pode ser alterado para exibir diferentes partes do buffer de 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 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 a janela de um buffer de tela.

    panorâmica da janela do buffer de tela em torno de um buffer grande de conteúdo

  • Ao usar a função WriteFile para gravar em um buffer de tela com encapsulamento no modo de saída de fim de linha (EOL) habilitado, o retângulo da janela muda automaticamente, portanto, o cursor sempre é exibido.

  • Quando a função SetConsoleCursorPosition especifica uma nova posição de cursor 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 ser alterado. 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 muda 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 encapsulamento 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 de tela do console que é 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 para cima 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 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 fique inalterado. O efeito do recorte é criar uma subwindow (o retângulo de recorte) cujo conteúdo é rolado sem afetar o restante do buffer de tela do console. Para obter um exemplo que usa ScrollConsoleScreenBuffer, consulte Rolando o conteúdo de um buffer de tela.