Advertisement
F_THIAGO

Console.cpp

Jul 23rd, 2019
382
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.47 KB | None | 0 0
  1. #include "console.h"
  2.  
  3. Console::Console()
  4. {
  5.     /*      Construtor da classe     */
  6.    
  7.     setConsole( STD_OUTPUT_HANDLE );
  8. }
  9.  
  10. Console::~Console()
  11. {
  12.     /*      Destrutor da classe     */
  13.  
  14.     close();
  15. }
  16.  
  17. bool Console::gotoxy( int x, int y )
  18. {
  19.     /*      Seta o cursor da saida em uma posicao
  20.     *
  21.     *   Utiliza os servicos do SO para posicionar o cursor da saida
  22.     * padrao em uma determinada posição;
  23.     *
  24.     * x ==> Numero da linha, a contar da posicao (0,0)
  25.     * y ==> Numero da coluna, a contar da posicao (0,0)
  26.     */
  27.    
  28.     COORD  coord = { (SHORT)x, (SHORT)y };
  29.    
  30.     if( hConsole == INVALID_HANDLE_VALUE )
  31.         return false;
  32.    
  33.     return SetConsoleCursorPosition( hConsole, coord );
  34. }
  35.  
  36. bool Console::setColor( WORD cor )
  37. {
  38.     /*      Define a cor do console padrao
  39.     *
  40.     *   Define atraves das rotinas do SO a cor do texto e/ou
  41.     * de fundo da saida padrao.
  42.     *
  43.     * cor ==> Combinação das constantes simbolicas disponibilizadas.
  44.     */
  45.    
  46.     if( hConsole == INVALID_HANDLE_VALUE )
  47.         return false;
  48.    
  49.     return SetConsoleTextAttribute( hConsole, cor );
  50. }
  51.  
  52. bool Console::setTitle(LPCSTR titulo)
  53. {
  54.     /*      Seta o titulo da janela do console
  55.     *
  56.     *   Essa funcao utiliza rotinas do sistema para definir
  57.     * o titulo da janela do console
  58.     *
  59.     * titulo ==> Titulo para a janela.
  60.     */
  61.  
  62.     if (hConsole == INVALID_HANDLE_VALUE)
  63.         return false;
  64.  
  65.     return SetConsoleTitle(titulo);
  66. }
  67.  
  68. bool Console::setConsole( DWORD consoleID )
  69. {
  70.     /*      Obtem o handle do console      
  71.     *
  72.     *   Seta o handle do console como uma das I/O padrões.
  73.     *
  74.     * consoleID ==> Constante que indica a i/o requerida.
  75.     */
  76.    
  77.     hConsole = GetStdHandle( consoleID );
  78.    
  79.     if( hConsole == INVALID_HANDLE_VALUE )
  80.         return false;
  81.    
  82.     return true;
  83. }
  84.  
  85. LPSTR Console::getMessageError()
  86. {
  87.     /*      Retorna a descrição do ultimo error ocorrido
  88.     *
  89.     *   Essa funcao retorna a descrição do ultimo error ocorrido
  90.     * utilizando serviços do SO.
  91.     */
  92.    
  93.     if( message )
  94.         free( message );
  95.    
  96.     FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
  97.         NULL, GetLastError(), 0, (char *)&message, 0, NULL );
  98.        
  99.     return message;
  100. }
  101.  
  102. bool Console::previousLine()
  103. {
  104.     /*      Volta uma linha no console atual        */
  105.    
  106.     COORD posicaoAtual = {0, 0};
  107.    
  108.     if( hConsole == INVALID_HANDLE_VALUE )
  109.         return false;
  110.    
  111.     posicaoAtual = getCursorPosition();
  112.    
  113.     posicaoAtual.X = 0;
  114.     posicaoAtual.Y -= 1;
  115.    
  116.     return gotoxy( posicaoAtual.X, posicaoAtual.Y );
  117. }
  118.  
  119. COORD Console::getCursorPosition()
  120. {
  121.     /*      Retorna a posicao atual do cursor   */
  122.        
  123.     CONSOLE_SCREEN_BUFFER_INFO info;
  124.     COORD posicao = {0, 0};
  125.    
  126.     if( hConsole == INVALID_HANDLE_VALUE )
  127.         return posicao;
  128.    
  129.     if( !GetConsoleScreenBufferInfo( hConsole, &info ) )
  130.         return posicao;
  131.    
  132.     return info.dwCursorPosition;
  133. }
  134.  
  135. void Console::delay( DWORD tempo )
  136. {
  137.     /*      Espera um determinado tempo para executar
  138.     *
  139.     *   Essa funcao congela a thread corrente por um
  140.     * determinado tempo.
  141.     *
  142.     * tempo ==> Tempo da pausa em ms
  143.     */
  144.    
  145.     Sleep( tempo );
  146. }
  147.  
  148. bool Console::mode(int x, int y )
  149. {
  150.     /*      Determina o tamanho visivel do console
  151.     *
  152.     *   Determina altura e largura para o console, retorna
  153.     * false em caso de erro.
  154.     *
  155.     * x ==> altura, numero de linhas
  156.     * y ==> largura, numero de colunas
  157.     */
  158.  
  159.     _SMALL_RECT info;
  160.     _COORD coord = { (SHORT)x, (SHORT)y };
  161.  
  162.     if (hConsole == INVALID_HANDLE_VALUE)
  163.         return false;
  164.  
  165.     info.Left   = 0;
  166.     info.Top    = 0;
  167.     info.Bottom = y - 1;
  168.     info.Right  = x - 1;
  169.  
  170.     SetConsoleScreenBufferSize( hConsole, coord );
  171.     return SetConsoleWindowInfo( hConsole, TRUE, &info );
  172. }
  173.  
  174. bool Console::cls(int x, int y)
  175. {
  176.     /*      Apaga parte da tela do console
  177.     *
  178.     *   Desenha o caracter em parte do console, começando pelo ponto(x,y).
  179.     * Retorna false em caso de error.
  180.     *
  181.     * x  ==> ponto x, numero da linha
  182.     * y  ==> ponto y, numero da coluna
  183.     */
  184.  
  185.     CONSOLE_SCREEN_BUFFER_INFO info;
  186.     COORD coord = { (SHORT)x, (SHORT)y };
  187.     DWORD tamanho;
  188.     DWORD escritos;
  189.  
  190.     if (hConsole == INVALID_HANDLE_VALUE)
  191.         return false;
  192.  
  193.     if (!GetConsoleScreenBufferInfo( hConsole, &info) )
  194.         return false;
  195.  
  196.     setColor(BACKGROUND_DEFAULT | FOREGROUND_DEFAULT );         // Cor e fundo padrao
  197.     tamanho = info.dwSize.X * info.dwSize.Y - coord.X * coord.Y; // Buffer total - buffer a partir do ponto
  198.    
  199.     return FillConsoleOutputCharacter( hConsole, ' ', tamanho, coord, &escritos );
  200. }
  201.  
  202. bool Console::cls()
  203. {
  204.     /*      Apaga toda a tela do console
  205.     *
  206.     *   Desenha o caracter ' ' em toda a tela do console.
  207.     */
  208.  
  209.     return cls(0, 0);
  210. }
  211.  
  212. void Console::close()
  213. {
  214.     /*      Finaliza os objetos da classe   */
  215.    
  216.     CloseHandle( hConsole );
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement