Leer en inglés

Compartir a través de


Búferes de pantalla de la consola

Un búfer de pantalla es una matriz bidimensional de datos de caracteres y colores para la salida en una ventana de la 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 la 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 búfer de pantalla nuevo no está activo hasta que su identificador se especifica en una llamada a la función SetConsoleActiveScreenBuffer. Sin embargo, se puede tener acceso a los búferes de pantalla para leer y escribir, independientemente de 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 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 puede establecer una serie de propiedades asociadas a un búfer de pantalla, de forma independiente para cada búfer de pantalla. Esto significa que cambiar el búfer de pantalla activo puede tener un efecto drástico 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 y columnas de caracteres.
  • Atributos de texto (colores de primer plano y de fondo para mostrar el texto que las funciones WriteFile o WriteConsole van a escribir).
  • 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 del cursor, apariencia y visibilidad.
  • Modos de salida (ENABLE_PROCESSED_OUTPUT y ENABLE_WRAP_AT_EOL_OUTPUT). Para más información sobre los modos de salida de la consola, consulte Modos de consola de nivel superior.

Cuando se crea un búfer de pantalla, contiene caracteres de espacio en todas las posiciones. 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 vienen 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 garantizar que las demás aplicaciones que comparten la misma sesión de consola no se vean afectadas por los cambios.

Sugerencia

Se recomienda usar el modo de búfer alternativo en adelante, si es posible, en lugar de crear un segundo búfer de pantalla para este fin. El modo de búfer alternativo ofrece mayor compatibilidad entre dispositivos remotos y con otras plataformas. Consulte la explicación sobre las API de consola clásica frente a la 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 está visible, su apariencia puede variar, desde llenar completamente una celda de carácter hasta que aparezca como una línea horizontal en la parte inferior de la celda. Para recuperar información sobre la apariencia y visibilidad del cursor, utilice la función GetConsoleCursorInfo. Esta función notifica si el cursor está visible y describe la apariencia del cursor como el porcentaje que rellena de una celda de carácter. Para establecer la apariencia y visibilidad del cursor, utilice la función GetConsoleCursorInfo.

Los caracteres escritos por las funciones de E/S de consola de nivel superior se escriben en la ubicación actual del cursor y el cursor avanza 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 selección de ubicación del texto escrito o repetido por las funciones de E/S de nivel superior. Si mueve el cursor, se sobrescribe el texto en la nueva ubicación del cursor.

Nota

No se recomienda el uso de las funciones de nivel inferior para buscar la posición del cursor. Se recomienda usar secuencias de terminal virtual para consultar esta posición si es necesario para los diseños avanzados. Puede encontrar más información sobre la preferencia de secuencias de terminal virtual en el documento sobre 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 siguientes atributos se definen en el archivo de encabezado WinCon.h.

Attribute 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 Invierte atributos de primer plano y de fondo.
COMMON_LVB_UNDERSCORE Guion bajo.

Los atributos de primer plano especifican el color de texto. Los atributos de fondo especifican el color utilizado 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 distintos colores. Por ejemplo, la combinación siguiente produce texto cian brillante sobre un fondo azul.

FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE

Si no se especifica ninguna constante de fondo, este es negro y, si no se especifica ninguna constante de primer plano, el texto es negro. Por ejemplo, la combinación siguiente produce texto en negro sobre un fondo blanco. Rojo, verde y azul se especifican para el fondo, que se combina con un fondo blanco. No se especifica ningún color de marca para el primer plano, por lo que es negro.

BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED

Cada celda de carácter de búfer de pantalla almacena los atributos de color de los colores utilizados en el dibujo del primer plano (texto) y el fondo de esa celda. Una aplicación puede establecer los datos de color para cada celda de caracteres individualmente, almacenando los datos en los miembros Atributos de la estructura CHAR_INFO de cada celda. Los atributos de texto actuales de cada búfer de pantalla se utilizan para los caracteres que posteriormente se escriben o se repiten por las funciones de nivel superior.

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 caracteres. El cambio de los atributos de un búfer de pantalla no afecta a la visualización de los caracteres escritos previamente. Estos atributos de texto no afectan a los caracteres escritos por las funciones de E/S de la consola de nivel inferior (por ejemplo, las funciones WriteConsoleOutput o WriteConsoleOutputCharacter), que especifican explícitamente los atributos para cada celda que se escribe o dejan los atributos sin modificar.

Nota

No se recomienda el uso de las funciones de nivel inferior 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 sobre funciones clásicas frente a terminal virtual.

Atributos de fuente

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

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

Nota

No se recomienda el uso de funciones para buscar y manipular la información de fuentes. Se recomienda utilizar las aplicaciones de línea de comandos en manera de fuente neutra para garantizar la compatibilidad entre plataformas, así como la compatibilidad con entornos de host que permiten al usuario personalizar la fuente. Para más información sobre las preferencias del usuario y los entornos de host, incluidos los terminales, consulte el mapa de ruta del ecosistema.