Centrar la consola en el esc. de Windows
Publicado por Daniel (16 intervenciones) el 26/12/2008 02:13:25
Hola
Con el cód. que dejo a continuación logro dimensionar la consola,posicionar el cursor en las coordenadas deseadas, lo que no puedo hacer es centrar la consola en el escritorio de windows.-
En este mismo foro Smaugh dejo un buen ejemplo con la función GetSystemMetrics pero esta echo para una ventana, lo que yo quiero es lo mismo pero para implementarlo en mi código(cosa que desconozco como se hace).-
----------------------------------------------------------------------------------------------------------
#include <windows.h>
#include <iostream>
HANDLE consola;
COORD posicion;
using namespace std;
void ResizeWindow(HANDLE hConsole, SHORT xSize, SHORT ySize)
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
BOOL bSuccess;
SMALL_RECT srWindowRect;
COORD coordScreen;
SetConsoleTitle("Ancho/alto de ventana y posicion del cursor a eleccion");
bSuccess = GetConsoleScreenBufferInfo(hConsole, &csbi);
coordScreen = GetLargestConsoleWindowSize(hConsole);
srWindowRect.Right = (SHORT) (min(xSize, coordScreen.X) - 1);
srWindowRect.Bottom = (SHORT) (min(ySize, coordScreen.Y) - 1);
srWindowRect.Left = srWindowRect.Top = (SHORT) 0;
coordScreen.X = xSize;
coordScreen.Y = ySize;
if ((DWORD) csbi.dwSize.X * csbi.dwSize.Y > (DWORD) xSize * ySize)
{
bSuccess = SetConsoleWindowInfo(hConsole, TRUE, &srWindowRect);
bSuccess = SetConsoleScreenBufferSize(hConsole, coordScreen);
}
if ((DWORD) csbi.dwSize.X * csbi.dwSize.Y < (DWORD) xSize * ySize)
{
bSuccess = SetConsoleScreenBufferSize(hConsole, coordScreen);
bSuccess = SetConsoleWindowInfo(hConsole, TRUE, &srWindowRect);
}
return;
}
int main(int argc, char *argv[])
{
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
ResizeWindow(hStdout,65,20);
consola = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTitle(" Ventana con ancho/alto y posicion del cursor a eleccion");
system("color 70");
int y_down = 1, final = 0, yoElijo = 0;
while ( final < 11 )
{
posicion.Y = y_down;
SetConsoleCursorPosition(consola, posicion);
cout << " Una de estas lineas cambiara su contenido...";
++y_down;
++final;
}
posicion.X= 2;
posicion.Y= 14;
SetConsoleCursorPosition(consola, posicion);
cout << "digite un entero del 1 al 11:";
cin >> yoElijo;
posicion.X= 1;
posicion.Y= yoElijo;
SetConsoleCursorPosition(consola, posicion);
cout << "El contenido de la frase a cambiado... ";
posicion.X= 1;
posicion.Y= 14;
SetConsoleCursorPosition(consola, posicion);
system("color 9A");
cout << "Presione una tecla para cerrar la ventana... ";
system("pause>nul");
return 0;
}
----------------------------------------------------------------------------------------------------------
Espero como siempre que deseen ayudarme.-
Saludos.-
Con el cód. que dejo a continuación logro dimensionar la consola,posicionar el cursor en las coordenadas deseadas, lo que no puedo hacer es centrar la consola en el escritorio de windows.-
En este mismo foro Smaugh dejo un buen ejemplo con la función GetSystemMetrics pero esta echo para una ventana, lo que yo quiero es lo mismo pero para implementarlo en mi código(cosa que desconozco como se hace).-
----------------------------------------------------------------------------------------------------------
#include <windows.h>
#include <iostream>
HANDLE consola;
COORD posicion;
using namespace std;
void ResizeWindow(HANDLE hConsole, SHORT xSize, SHORT ySize)
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
BOOL bSuccess;
SMALL_RECT srWindowRect;
COORD coordScreen;
SetConsoleTitle("Ancho/alto de ventana y posicion del cursor a eleccion");
bSuccess = GetConsoleScreenBufferInfo(hConsole, &csbi);
coordScreen = GetLargestConsoleWindowSize(hConsole);
srWindowRect.Right = (SHORT) (min(xSize, coordScreen.X) - 1);
srWindowRect.Bottom = (SHORT) (min(ySize, coordScreen.Y) - 1);
srWindowRect.Left = srWindowRect.Top = (SHORT) 0;
coordScreen.X = xSize;
coordScreen.Y = ySize;
if ((DWORD) csbi.dwSize.X * csbi.dwSize.Y > (DWORD) xSize * ySize)
{
bSuccess = SetConsoleWindowInfo(hConsole, TRUE, &srWindowRect);
bSuccess = SetConsoleScreenBufferSize(hConsole, coordScreen);
}
if ((DWORD) csbi.dwSize.X * csbi.dwSize.Y < (DWORD) xSize * ySize)
{
bSuccess = SetConsoleScreenBufferSize(hConsole, coordScreen);
bSuccess = SetConsoleWindowInfo(hConsole, TRUE, &srWindowRect);
}
return;
}
int main(int argc, char *argv[])
{
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
ResizeWindow(hStdout,65,20);
consola = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTitle(" Ventana con ancho/alto y posicion del cursor a eleccion");
system("color 70");
int y_down = 1, final = 0, yoElijo = 0;
while ( final < 11 )
{
posicion.Y = y_down;
SetConsoleCursorPosition(consola, posicion);
cout << " Una de estas lineas cambiara su contenido...";
++y_down;
++final;
}
posicion.X= 2;
posicion.Y= 14;
SetConsoleCursorPosition(consola, posicion);
cout << "digite un entero del 1 al 11:";
cin >> yoElijo;
posicion.X= 1;
posicion.Y= yoElijo;
SetConsoleCursorPosition(consola, posicion);
cout << "El contenido de la frase a cambiado... ";
posicion.X= 1;
posicion.Y= 14;
SetConsoleCursorPosition(consola, posicion);
system("color 9A");
cout << "Presione una tecla para cerrar la ventana... ";
system("pause>nul");
return 0;
}
----------------------------------------------------------------------------------------------------------
Espero como siempre que deseen ayudarme.-
Saludos.-
Valora esta pregunta
0