Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "console.h"
- Console::Console()
- {
- /* Construtor da classe */
- setConsole( STD_OUTPUT_HANDLE );
- }
- Console::~Console()
- {
- /* Destrutor da classe */
- close();
- }
- bool Console::gotoxy( int x, int y )
- {
- /* Seta o cursor da saida em uma posicao
- *
- * Utiliza os servicos do SO para posicionar o cursor da saida
- * padrao em uma determinada posição;
- *
- * x ==> Numero da linha, a contar da posicao (0,0)
- * y ==> Numero da coluna, a contar da posicao (0,0)
- */
- COORD coord = { (SHORT)x, (SHORT)y };
- if( hConsole == INVALID_HANDLE_VALUE )
- return false;
- return SetConsoleCursorPosition( hConsole, coord );
- }
- bool Console::setColor( WORD cor )
- {
- /* Define a cor do console padrao
- *
- * Define atraves das rotinas do SO a cor do texto e/ou
- * de fundo da saida padrao.
- *
- * cor ==> Combinação das constantes simbolicas disponibilizadas.
- */
- if( hConsole == INVALID_HANDLE_VALUE )
- return false;
- return SetConsoleTextAttribute( hConsole, cor );
- }
- bool Console::setTitle(LPCSTR titulo)
- {
- /* Seta o titulo da janela do console
- *
- * Essa funcao utiliza rotinas do sistema para definir
- * o titulo da janela do console
- *
- * titulo ==> Titulo para a janela.
- */
- if (hConsole == INVALID_HANDLE_VALUE)
- return false;
- return SetConsoleTitle(titulo);
- }
- bool Console::setConsole( DWORD consoleID )
- {
- /* Obtem o handle do console
- *
- * Seta o handle do console como uma das I/O padrões.
- *
- * consoleID ==> Constante que indica a i/o requerida.
- */
- hConsole = GetStdHandle( consoleID );
- if( hConsole == INVALID_HANDLE_VALUE )
- return false;
- return true;
- }
- LPSTR Console::getMessageError()
- {
- /* Retorna a descrição do ultimo error ocorrido
- *
- * Essa funcao retorna a descrição do ultimo error ocorrido
- * utilizando serviços do SO.
- */
- if( message )
- free( message );
- FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- NULL, GetLastError(), 0, (char *)&message, 0, NULL );
- return message;
- }
- bool Console::previousLine()
- {
- /* Volta uma linha no console atual */
- COORD posicaoAtual = {0, 0};
- if( hConsole == INVALID_HANDLE_VALUE )
- return false;
- posicaoAtual = getCursorPosition();
- posicaoAtual.X = 0;
- posicaoAtual.Y -= 1;
- return gotoxy( posicaoAtual.X, posicaoAtual.Y );
- }
- COORD Console::getCursorPosition()
- {
- /* Retorna a posicao atual do cursor */
- CONSOLE_SCREEN_BUFFER_INFO info;
- COORD posicao = {0, 0};
- if( hConsole == INVALID_HANDLE_VALUE )
- return posicao;
- if( !GetConsoleScreenBufferInfo( hConsole, &info ) )
- return posicao;
- return info.dwCursorPosition;
- }
- void Console::delay( DWORD tempo )
- {
- /* Espera um determinado tempo para executar
- *
- * Essa funcao congela a thread corrente por um
- * determinado tempo.
- *
- * tempo ==> Tempo da pausa em ms
- */
- Sleep( tempo );
- }
- bool Console::mode(int x, int y )
- {
- /* Determina o tamanho visivel do console
- *
- * Determina altura e largura para o console, retorna
- * false em caso de erro.
- *
- * x ==> altura, numero de linhas
- * y ==> largura, numero de colunas
- */
- _SMALL_RECT info;
- _COORD coord = { (SHORT)x, (SHORT)y };
- if (hConsole == INVALID_HANDLE_VALUE)
- return false;
- info.Left = 0;
- info.Top = 0;
- info.Bottom = y - 1;
- info.Right = x - 1;
- SetConsoleScreenBufferSize( hConsole, coord );
- return SetConsoleWindowInfo( hConsole, TRUE, &info );
- }
- bool Console::cls(int x, int y)
- {
- /* Apaga parte da tela do console
- *
- * Desenha o caracter em parte do console, começando pelo ponto(x,y).
- * Retorna false em caso de error.
- *
- * x ==> ponto x, numero da linha
- * y ==> ponto y, numero da coluna
- */
- CONSOLE_SCREEN_BUFFER_INFO info;
- COORD coord = { (SHORT)x, (SHORT)y };
- DWORD tamanho;
- DWORD escritos;
- if (hConsole == INVALID_HANDLE_VALUE)
- return false;
- if (!GetConsoleScreenBufferInfo( hConsole, &info) )
- return false;
- setColor(BACKGROUND_DEFAULT | FOREGROUND_DEFAULT ); // Cor e fundo padrao
- tamanho = info.dwSize.X * info.dwSize.Y - coord.X * coord.Y; // Buffer total - buffer a partir do ponto
- return FillConsoleOutputCharacter( hConsole, ' ', tamanho, coord, &escritos );
- }
- bool Console::cls()
- {
- /* Apaga toda a tela do console
- *
- * Desenha o caracter ' ' em toda a tela do console.
- */
- return cls(0, 0);
- }
- void Console::close()
- {
- /* Finaliza os objetos da classe */
- CloseHandle( hConsole );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement