¿Escritura animada y centrada en Dev C++?

Actualmente estoy usando un comando para "animar" el texto, ya que hace que se vaya escribiendo letra por letra y da el efecto de que la máquina lo va escribiendo, y en mi opinión queda bien.

Este es el comando:

#include <iostream>

#include <windows.h>

using namespace std;

int main()

{

string msg = "Hello World!";

for(int i = 0 ; i < msg.length() ; i++)

{

cout << msg[i];

Sleep(100);

}

return 0;

}

Lo que quisiera saber es que si hay alguna forma de lograr hacer que se centre en la pantalla, se que se puede hacer con un gotoxy y ponerle las coordenadas de la pantalla, el problema es que a veces en otros equipos esas coordenadas no se acomodan porqué la pantalla o ventana tienen otras proporciones muy distintas.

Si alguien pudiera darme alguna forma de centrar el texto por medio de las proporciones que tiene la pantalla o ventana lo agradecería, gracias.

2 respuestas

Calificación
  • Anónimo
    hace 5 meses

    Eso depende de como quieras centrar el texto.

    Para calcular las coordenadas donde se debe centrar el texto:

    x + tamaño string + x = 80

    2x + tamaño string = 80

    x = (80 - tamaño string) / 2

    y = 50/2

    y = 25

    En caso de que sea más de un string:

    y + número de strings + y = 50

    2y = 50 - número de strings

    y = (50 - número de strings)/2

    Para resolver el problema del tamaño de la ventana puedes usar una función que maximize la ventana.

    Este es un ejemplo para un solo mensaje en el centro de la pantalla:

    #include <iostream>

    #include <windows.h>

    using namespace std;

    void gotoxy(int x,int y) // imita el gotoxy de la librería conio.h

    {

    HANDLE hcon;

    hcon = GetStdHandle(STD_OUTPUT_HANDLE);

    COORD Coord;

    Coord.X = x;

    Coord.Y= y;

    SetConsoleCursorPosition(hcon, Coord);

    }

    void Maximizar()

    {

    HWND VentanaConsola = GetConsoleWindow(); // esto obtiene el valor que Windows usa para identificar tu ventana de salida

    ShowWindow(VentanaConsola, SW_MAXIMIZE); // Esto imita hacer clic sobre su botón de maximizar

    }

    int main()

    {

    Maximizar();

    string msg = "Hello World!";

    const int largo = 80;

    int x = (largo - msg.length())/2;

    int y = 25; // y = 0; en caso de centrar desde el primer renglón

    gotoxy(x, y);

    for(int i = 0 ; i < msg.length() ; i++)

    {

    cout << msg[i];

    Sleep(100);

    }

    return 0;

    }

    Nota que este código solo funciona si el tamaño del string es de 80 o menos caracteres (esto podría hacerse de manera más robusta para aceptar strings de mayor tamaño, sin embargo, esto solo una idea de como podrías centrar el string).

    Para imprimir el texto desde cualquier altura de la pantalla de la consola, crea la siguiente función:

    void texto_centrado(string msg, int y)

    {

    const int largo = 80;

    int x = (largo - msg.length())/2;

    gotoxy(x, y);

    for(int i = 0 ; i < msg.length() ; i++)

    {

    cout << msg[i];

    Sleep(100);

    }

    }

    Un ejemplo de como usar la función en el programa:

    int main

    {

    string msg = "Hello World!";

    string msg2 = "Welcome to C++";

    texto_centrado(msg, 0); // imprime el string de manera centrada en la fila 0

    texto_centrado(msg2, 1); // imprime el string de manera centrada en la fila 1

    return 0;

    }

  • hace 6 meses

    https://docs.microsoft.com/en-us/windows/console/g...

    HANDLE h = getStdHandle(STD_OUTPUT_HANDLE); // obtén handle del output de la consola

    https://docs.microsoft.com/en-us/windows/console/g...

    CONSOLE_SCREEN_BUFFER_INFO p;

    GetConsoleScreenBufferInfo(h, p);

    /* obtén información del screen buffer de la consola usando la estructura CONSOLE_SCREEN_.... */

    p.dwSize.x / 2; // tamaño x de pantalla dividido entre 2 para centrar

    p.dwSize.y / 2; // tamaño y de pantalla dividido entre 2 para centrar

    creo que seria algo asi, pruebalo.

    • kkkhace 5 mesesDenunciar

      ponle el & a la p
      ejemplo: GetConsoleScreenBufferInfo(h, &p);

      y en vez de p.dwSize.X usa p.srWindow.Right / 2 y en vez de p.dwSize.Y usa p.srWindow.Bottom / 2

      luego los valores los guardas
      int x = p.srWindow.Right / 2;
      int y = p.srWindow….

      y usas el "gotoxy(x, y);"
      cout << ".";

¿Aún tienes preguntas? Pregunta ahora y obtén respuestas.