Compartir a través de


Desplazamiento por el búfer de pantalla

Importante

En este documento se describe funcionalidad de la plataforma de consola que ya no forma parte de nuestro plan de desarrollo del ecosistema. No se recomienda utilizar este contenido en nuevos productos, pero seguiremos admitiendo los usos existentes en un futuro indefinido. Nuestra solución moderna preferida se centra en secuencias de terminal virtual para lograr la máxima compatibilidad en escenarios multiplataforma. Puede encontrar más información sobre esta decisión de diseño en nuestro documento de Comparación de consola clásica y terminal virtual.

La ventana de consola muestra una parte del búfer de pantalla activo. Cada búfer de pantalla mantiene su propio rectángulo de ventana actual que especifica las coordenadas de las celdas de caracteres superior izquierda e inferior derecha que se van a mostrar en la ventana de consola. Para determinar el rectángulo de ventana actual de un búfer de pantalla, utilice GetConsoleScreenBufferInfo. Cuando se crea un búfer de pantalla, la esquina superior izquierda de su ventana se encuentra en esta misma esquina del búfer de pantalla de consola, en (0,0).

El rectángulo de ventana puede cambiar para mostrar diferentes partes del búfer de pantalla de consola. El rectángulo de ventana de un búfer de pantalla puede cambiar en las situaciones siguientes:

  • Cuando se llama a SetConsoleWindowInfo para especificar un nuevo rectángulo de ventana, desplaza la vista del búfer de pantalla de consola cambiando la posición del rectángulo de ventana, sin modificar el tamaño de la ventana. Para ver ejemplos de desplazamiento del contenido de la ventana, consulte Desplazamiento por la ventana de un búfer de pantalla.

    screen buffer window panning around large buffer of content

  • Cuando se utiliza la función WriteFile para escribir en un búfer de pantalla con el modo de salida de ajuste en final de línea (EOL) habilitado, el rectángulo de ventana cambia automáticamente, por lo que el cursor siempre se muestra.

  • Cuando la función SetConsoleCursorPosition especifica una nueva posición del cursor que está fuera de los límites del rectángulo de ventana actual, este rectángulo cambia automáticamente para mostrar el cursor.

  • Cuando el usuario cambia el tamaño de la ventana de consola o utiliza las barras de desplazamiento de la ventana, también puede cambiar el rectángulo de ventana del búfer de pantalla activo. Este cambio no se notifica como un evento de cambio de tamaño de ventana en el búfer de entrada.

En cada una de estas situaciones, el rectángulo de ventana cambia para mostrar una parte diferente del búfer de pantalla de consola, pero el contenido de este búfer permanece en la misma posición. El contenido del búfer de pantalla de consola puede cambiar en las situaciones siguientes:

  • Cuando se llama a la función ScrollConsoleScreenBuffer, se copia un bloque rectangular de una parte de un búfer de pantalla en otra.
  • Si se utiliza WriteFile para escribir en un búfer de pantalla con el modo de salida de ajuste en EOL habilitado, el contenido del búfer de pantalla de consola se desplaza automáticamente cuando se alcanza el final de este búfer. Este desplazamiento descarta la fila superior del búfer de pantalla de consola.

ScrollConsoleScreenBuffer especifica el rectángulo del búfer de pantalla de consola que se mueve y las nuevas coordenadas de la parte superior izquierda en las que se copia el rectángulo. Esta función puede desplazar todo el contenido del búfer de pantalla de consola o una parte de él.

En la ilustración se muestra una operación ScrollConsoleScreenBuffer que desplaza todo el contenido del búfer de pantalla de consola varias filas hacia arriba. El contenido de las filas superiores se descarta y las filas inferiores se rellenan con un carácter y un color especificados.

screen buffer window scrolling content off top to discard

Los efectos de ScrollConsoleScreenBuffer se pueden limitar especificando un rectángulo de recorte opcional para que no cambie el contenido del búfer de pantalla de consola que queda fuera de este rectángulo. El efecto de recorte consiste en crear una ventana secundaria (el rectángulo de recorte) cuyo contenido se desplaza sin que esto afecte al resto del búfer de pantalla de consola. Para ver un ejemplo en el que se utiliza ScrollConsoleScreenBuffer, consulte Desplazamiento por el contenido de un búfer de pantalla.