Compartir a través de


Búferes de pantalla de consola

Un búfer de pantalla es una matriz bidimensional de datos de caracteres y colores para la salida en una ventana de consola. Una consola puede tener varios búferes de pantalla. El búfer de pantalla activo es el que se muestra en la pantalla.

El sistema crea un búfer de pantalla cada vez que crea una nueva consola. Para abrir un identificador en el búfer de pantalla activo de una consola, especifique el valor CONOUT$ en una llamada a la función CreateFile . Un proceso puede usar la función CreateConsoleScreenBuffer para crear búferes de pantalla adicionales para su consola. Un nuevo búfer de pantalla no está activo hasta que se especifica su identificador en una llamada a la función SetConsoleActiveScreenBuffer . Sin embargo, se puede acceder a los búferes de pantalla para leer y escribir si están activos o inactivos.

Cada búfer de pantalla tiene su propia matriz bidimensional de registros de información de caracteres. Los datos de cada carácter se almacenan en una estructura de CHAR_INFO que especifica el carácter Unicode o ANSI y los colores de primer plano y de fondo en los que se muestra ese carácter.

Se pueden establecer de forma independiente varias propiedades asociadas a un búfer de pantalla para cada búfer de pantalla. Esto significa que cambiar el búfer de pantalla activo puede tener un efecto dramático en la apariencia de la ventana de la consola. Las propiedades asociadas a un búfer de pantalla incluyen:

  • Tamaño del búfer de pantalla, en filas de caracteres y columnas.
  • Atributos de texto (colores de primer plano y de fondo para mostrar texto que va a escribir la función WriteFile o WriteConsole ).
  • Tamaño y ubicación de la ventana (la región rectangular del búfer de pantalla de la consola que se muestra en la ventana de la consola).
  • Posición, apariencia y visibilidad del cursor.
  • Modos de salida (ENABLE_PROCESSED_OUTPUT y ENABLE_WRAP_AT_EOL_OUTPUT). Para obtener más información sobre los modos de salida de la consola, consulte High-Level Modos de consola.

Cuando se crea un búfer de pantalla, contiene caracteres de espacio en cada posición. Su cursor está visible y colocado en el origen del búfer (0,0), y la ventana se coloca con su esquina superior izquierda en el origen del búfer. El tamaño del búfer de pantalla de la consola, el tamaño de la ventana, los atributos de texto y la apariencia del cursor están determinados por el usuario o por los valores predeterminados del sistema. Para recuperar los valores actuales de las distintas propiedades asociadas al búfer de pantalla de la consola, use las funciones GetConsoleScreenBufferInfo, GetConsoleCursorInfo y GetConsoleMode .

Las aplicaciones que cambian cualquiera de las propiedades del búfer de pantalla de la consola deben crear su propio búfer de pantalla o guardar el estado del búfer de pantalla heredado durante el inicio y restaurarlo al salir. Este comportamiento cooperativo es necesario para asegurarse de que otras aplicaciones que comparten la misma sesión de consola no se ven afectadas por los cambios.

Sugerencia

Se recomienda usar el modo de búfer alternativo en el futuro, si es posible, en lugar de crear un segundo búfer de pantalla para este propósito. El modo de búfer alternativo ofrece una mayor compatibilidad entre dispositivos remotos y con otras plataformas. Consulte nuestra explicación sobre las API de consola clásica frente al terminal virtual para obtener más información.

Apariencia y posición del cursor

El cursor de un búfer de pantalla puede estar visible u oculto. Cuando es visible, su apariencia puede variar, desde rellenar completamente una celda de caracteres hasta aparecer como una línea horizontal en la parte inferior de la celda. Para recuperar información sobre la apariencia y la visibilidad del cursor, use la función GetConsoleCursorInfo . Esta función informa de si el cursor está visible y describe la apariencia del cursor como porcentaje de una celda de caracteres que rellena. Para establecer la apariencia y la visibilidad del cursor, use la función SetConsoleCursorInfo .

Los caracteres escritos por las funciones de E/S de la consola de alto nivel se escriben en la ubicación actual del cursor, avanzando el cursor a la siguiente ubicación. Para determinar la posición actual del cursor en el sistema de coordenadas de un búfer de pantalla, use GetConsoleScreenBufferInfo. Puede usar SetConsoleCursorPosition para establecer la posición del cursor y, por lo tanto, controlar la ubicación del texto escrito o eco de las funciones de E/S de alto nivel. Si mueve el cursor, se sobrescribe el texto en la nueva ubicación del cursor.

Nota:

No se recomienda usar las funciones de bajo nivel para encontrar la posición del cursor. Se recomienda usar secuencias de terminal virtual para consultar esta posición si es necesario para diseños avanzados. Puede encontrar más información sobre la preferencia de secuencias de terminal virtual en el documento funciones clásicas frente a terminal virtual .

La posición, la apariencia y la visibilidad del cursor se establecen de forma independiente para cada búfer de pantalla.

Atributos de caracteres

Los atributos de caracteres se pueden dividir en dos clases: color y DBCS. Los atributos siguientes se definen en el archivo de WinCon.h encabezado.

Atributo Significado
FOREGROUND_BLUE El color del texto contiene azul.
FOREGROUND_GREEN El color del texto contiene verde.
FOREGROUND_RED El color del texto contiene rojo.
FOREGROUND_INTENSITY El color del texto se intensifica.
BACKGROUND_BLUE El color de fondo contiene azul.
BACKGROUND_GREEN El color de fondo contiene verde.
BACKGROUND_RED El color de fondo contiene rojo.
BACKGROUND_INTENSITY El color de fondo se intensifica.
COMMON_LVB_LEADING_BYTE Byte inicial.
COMMON_LVB_TRAILING_BYTE Byte final.
COMMON_LVB_GRID_HORIZONTAL Horizontal superior.
COMMON_LVB_GRID_LVERTICAL Vertical izquierda.
COMMON_LVB_GRID_RVERTICAL Vertical derecha.
COMMON_LVB_REVERSE_VIDEO Atributos inversos en primer plano y en segundo plano.
COMMON_LVB_UNDERSCORE Subrayar.

Los atributos de primer plano especifican el color del texto. Los atributos de fondo especifican el color usado para rellenar el fondo de la celda. Los demás atributos se usan con DBCS.

Una aplicación puede combinar las constantes de primer plano y de fondo para lograr colores diferentes. Por ejemplo, la siguiente combinación da como resultado texto cian brillante en un fondo azul.

FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE

Si no se especifica ninguna constante de fondo, el fondo es negro y, si no se especifica ninguna constante de primer plano, el texto es negro. Por ejemplo, la siguiente combinación genera texto negro en un fondo blanco. Se especifican rojo, verde y azul para el fondo que se combina con un fondo blanco. No se especifican colores de marca para el primer plano, por lo que es negro.

BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED

Cada celda de caracteres de búfer de pantalla almacena los atributos de color de los colores utilizados en dibujar el primer plano (texto) y el fondo de esa celda. Una aplicación puede establecer los datos de color de cada celda de caracteres individualmente, almacenando los datos en el miembro Attributes de la estructura CHAR_INFO para cada celda. Los atributos de texto actuales de cada búfer de pantalla se usan para los caracteres escritos o devueltos posteriormente por las funciones de alto nivel.

Una aplicación puede usar GetConsoleScreenBufferInfo para determinar los atributos de texto actuales de un búfer de pantalla y la función SetConsoleTextAttribute para establecer los atributos de carácter. Cambiar los atributos de un búfer de pantalla no afecta a la visualización de caracteres escritos anteriormente. Estos atributos de texto no afectan a los caracteres escritos por las funciones de E/S de consola de bajo nivel (como la función WriteConsoleOutput o WriteConsoleOutputCharacter ), que especifica explícitamente los atributos para cada celda escrita o deja los atributos sin cambios.

Nota:

No se recomienda usar las funciones de bajo nivel para manipular atributos de texto predeterminados y específicos. Se recomienda usar secuencias de terminal virtual para establecer atributos de texto. Puede encontrar más información sobre la preferencia de secuencias de terminal virtual en el documento funciones clásicas frente a terminal virtual .

Atributos de fuente

La función GetCurrentConsoleFont recupera información sobre la fuente de la consola actual. La información almacenada en la estructura CONSOLE_FONT_INFO incluye el ancho y alto de cada carácter de la fuente.

La función GetConsoleFontSize recupera el tamaño de la fuente usada por el búfer de pantalla de consola especificado.

Nota:

No se recomienda usar funciones para buscar y manipular información de fuentes. Se recomienda usar aplicaciones de línea de comandos de forma neutra de fuentes para garantizar la compatibilidad multiplataforma, así como la compatibilidad con entornos host que permiten al usuario personalizar la fuente. Más información sobre las preferencias de usuario y los entornos de host, incluidos los terminales, consulte la hoja de ruta del ecosistema.