Partilhar via


Buffers de ecrã do console

Um buffer de tela é uma matriz bidimensional de dados de caracteres e cores para saída em uma janela de console. Um console pode ter vários buffers de tela. O buffer de tela ativo é aquele que é exibido na tela.

O sistema cria um buffer de tela sempre que cria um novo console. Para abrir um identificador para o buffer de tela ativo de um console, especifique o valor CONOUT$ em uma chamada para a função CreateFile . Um processo pode usar a função CreateConsoleScreenBuffer para criar buffers de tela adicionais para seu console. Um novo buffer de tela não está ativo até que seu identificador seja especificado em uma chamada para a função SetConsoleActiveScreenBuffer . No entanto, os buffers de tela podem ser acessados para leitura e gravação, estejam eles ativos ou inativos.

Cada buffer de tela tem sua própria matriz bidimensional de registros de informações de caracteres. Os dados de cada caractere são armazenados em uma estrutura CHAR_INFO que especifica o caractere Unicode ou ANSI e as cores de primeiro plano e plano de fundo nas quais esse caractere é exibido.

Várias propriedades associadas a um buffer de tela podem ser definidas independentemente para cada buffer de tela. Isso significa que alterar o buffer de tela ativo pode ter um efeito dramático na aparência da janela do console. As propriedades associadas a um buffer de tela incluem:

  • Tamanho do buffer de tela, em linhas e colunas de caracteres.
  • Atributos de texto (cores de primeiro plano e plano de fundo para exibir texto a ser escrito pela função WriteFile ou WriteConsole ).
  • Tamanho e localização da janela (a região retangular do buffer da tela do console que é exibida na janela do console).
  • Posição, aparência e visibilidade do cursor.
  • Modos de saída (ENABLE_PROCESSED_OUTPUT e ENABLE_WRAP_AT_EOL_OUTPUT). Para obter mais informações sobre os modos de saída do console, consulte High-Level modos de console.

Quando um buffer de tela é criado, ele contém caracteres de espaço em todas as posições. Seu cursor é visível e posicionado na origem do buffer (0,0), e a janela é posicionada com seu canto superior esquerdo na origem do buffer. O tamanho do buffer da tela do console, o tamanho da janela, os atributos de texto e a aparência do cursor são determinados pelo usuário ou pelos padrões do sistema. Para recuperar os valores atuais das várias propriedades associadas ao buffer de tela do console, use as funções GetConsoleScreenBufferInfo, GetConsoleCursorInfo e GetConsoleMode .

Os aplicativos que alteram qualquer uma das propriedades do buffer de tela do console devem criar seu próprio buffer de tela ou salvar o estado do buffer de tela herdado durante a inicialização e restaurá-lo na saída. Esse comportamento cooperativo é necessário para garantir que outros aplicativos que compartilham a mesma sessão de console não sejam afetados pelas alterações.

Sugestão

Recomenda-se usar o modo de buffer alternativo no futuro, se possível, em vez de criar um buffer de segunda tela para essa finalidade. O modo de buffer alternativo oferece maior compatibilidade entre dispositivos remotos e com outras plataformas. Consulte nossa discussão sobre APIs de console clássicas versus terminal virtual para obter mais informações.

Aparência e posição do cursor

O cursor de um buffer de tela pode estar visível ou oculto. Quando é visível, sua aparência pode variar, desde preencher completamente uma célula de caractere até aparecer como uma linha horizontal na parte inferior da célula. Para recuperar informações sobre a aparência e a visibilidade do cursor, use a função GetConsoleCursorInfo . Esta função informa se o cursor está visível e descreve a aparência do cursor como a porcentagem de uma célula de caractere que ele preenche. Para definir a aparência e a visibilidade do cursor, use a função SetConsoleCursorInfo .

Os caracteres escritos pelas funções de E/S do console de alto nível são gravados no local atual do cursor, avançando o cursor para o próximo local. Para determinar a posição atual do cursor no sistema de coordenadas de um buffer de tela, use GetConsoleScreenBufferInfo. Você pode usar SetConsoleCursorPosition para definir a posição do cursor e, assim, controlar o posicionamento do texto que é escrito ou ecoado pelas funções de E/S de alto nível. Se você mover o cursor, o texto no novo local do cursor será substituído.

Observação

O uso das funções de baixo nível para encontrar a posição do cursor é desencorajado. Recomenda-se o uso de sequências de terminais virtuais para consultar essa posição, se necessário, para layouts avançados. Mais informações sobre como preferir sequências de terminais virtuais podem ser encontradas no documento de funções clássicas versus terminal virtual .

A posição, aparência e visibilidade do cursor são definidas independentemente para cada buffer de tela.

Atributos do caractere

Os atributos de caracteres podem ser divididos em duas classes: cor e DBCS. Os atributos a seguir são definidos no WinCon.h arquivo de cabeçalho.

Atributo Significado
FOREGROUND_BLUE A cor do texto contém azul.
FOREGROUND_GREEN A cor do texto contém verde.
FOREGROUND_RED A cor do texto contém vermelho.
FOREGROUND_INTENSITY A cor do texto é intensificada.
BACKGROUND_BLUE A cor de fundo contém azul.
BACKGROUND_GREEN A cor de fundo contém verde.
BACKGROUND_RED A cor de fundo contém vermelho.
BACKGROUND_INTENSITY A cor de fundo é intensificada.
COMMON_LVB_LEADING_BYTE Byte principal.
COMMON_LVB_TRAILING_BYTE Byte à direita.
COMMON_LVB_GRID_HORIZONTAL Parte superior horizontal.
COMMON_LVB_GRID_LVERTICAL Vertical esquerda.
COMMON_LVB_GRID_RVERTICAL Vertical direita.
COMMON_LVB_REVERSE_VIDEO Inverta atributos de primeiro plano e plano de fundo.
COMMON_LVB_UNDERSCORE Sublinhar.

Os atributos de primeiro plano especificam a cor do texto. Os atributos de plano de fundo especificam a cor usada para preencher o plano de fundo da célula. Os outros atributos são usados com DBCS.

Um aplicativo pode combinar as constantes de primeiro plano e plano de fundo para obter cores diferentes. Por exemplo, a combinação a seguir resulta em texto ciano brilhante em um fundo azul.

FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE

Se nenhuma constante de plano de fundo for especificada, o plano de fundo será preto e, se nenhuma constante de primeiro plano for especificada, o texto será preto. Por exemplo, a combinação a seguir produz texto preto em um fundo branco. Vermelho, verde e azul são especificados para o plano de fundo que se combina com um fundo branco. Nenhuma cor de bandeira é especificada para o primeiro plano, por isso é preto.

BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED

Cada célula de caractere de buffer de tela armazena os atributos de cor para as cores usadas no desenho do primeiro plano (texto) e do plano de fundo dessa célula. Um aplicativo pode definir os dados de cor para cada célula de caractere individualmente, armazenando os dados no membro Atributos da estrutura de CHAR_INFO para cada célula. Os atributos de texto atuais de cada buffer de tela são usados para caracteres subsequentemente escritos ou ecoados pelas funções de alto nível.

Um aplicativo pode usar GetConsoleScreenBufferInfo para determinar os atributos de texto atuais de um buffer de tela e a função SetConsoleTextAttribute para definir os atributos de caractere. A alteração dos atributos de um buffer de tela não afeta a exibição de caracteres escritos anteriormente. Esses atributos de texto não afetam os caracteres escritos pelas funções de E/S do console de baixo nível (como a função WriteConsoleOutput ou WriteConsoleOutputCharacter ), que especificam explicitamente os atributos para cada célula gravada ou deixam os atributos inalterados.

Observação

O uso de funções de baixo nível para manipular atributos de texto padrão e específicos é desencorajado. Recomenda-se o uso de sequências de terminais virtuais para definir atributos de texto. Mais informações sobre como preferir sequências de terminais virtuais podem ser encontradas no documento de funções clássicas versus terminal virtual .

Atributos de fonte

A função GetCurrentConsoleFont recupera informações sobre a fonte do console atual. As informações armazenadas na estrutura CONSOLE_FONT_INFO incluem a largura e a altura de cada caractere na fonte.

A função GetConsoleFontSize recupera o tamanho da fonte usada pelo buffer de tela do console especificado.

Observação

O uso de funções para localizar e manipular informações de fontes é desencorajado. Recomenda-se operar aplicativos de linha de comando de maneira neutra em fonte para garantir compatibilidade entre plataformas, bem como compatibilidade com ambientes de host que permitem ao usuário personalizar a fonte. Para mais informações, preferências do utilizador e ambientes de alojamento, incluindo terminais, consulte o roteiro do ecossistema.