Ir ao conteúdo

Posts recomendados

Postado

Estou no meu segundo semestre de Engenharia de Redes de Comunicação na UnB e estou montando um kit de exemplos de C++ para ajudar na hora  de criar novos programas no Dev C++ 5.11. Tem exemplos matemáticos, passagem de parâmetro por referência, funções, janelas de aviso, uso de array, vetor, orientação a objeto, tocar som, mudar cor do terminal, ... A ideia é ir aprimorando o kit de códigos deixando mais completo e didático.

Aqui no GitHub tem os arquivos:https://github.com/luisrguerra/devcpp-ptbr-mini-kit-cpp

mini_kit_c++_v0.9.cpp:

#include <iostream>   // necessario para o cout
 #include <locale.h>   // em algumas situações parece nao ser necessario  para o setlocale
 #include <string>     // necessario para usar variaveis de string
 #include <math.h>     // necessario para usar pow, sqrt, round, ceil, floor, sin, cos, tan
 #include <windows.h>  // necessario para usar sleep e beep
 #include <conio.h>    // necessario para usar getch e getche
 #include <fstream>    // necessario para gravar arquivos com ofstream
 #include <time.h>     // necessario para srand (time(NULL));
 #include <vector>     // usado para vetores
 
 using namespace std;

   /*Luis Eduardo Ribeiro Guerra
      Mini kit de Dev C++ v0.9   */
   /* feito no Dev-C++ 5.11 para livre uso creativo e distribuição*/
   /* Contato: [email protected] */
   /*Github com códigos fontes e atualizações:
     https://github.com/luisrguerra/devcpp-ptbr-mini-kit-cpp
                                                           */
       

// variaveis

// char char_ex = 'a';    // um caractere
// string string_ex;      // texto
// int int_ex;            // numero inteiro
// bool bool_ex;          // 0 ou 1; false(0) ou true(1)
// float float_ex;        // ponto flutuante
// double double_ex;      // ponto flutuante de dupla precisao
 

 /// usado nos exemlos de funcoes
 void funcaoteste (){
 	cout << "Teste da função realizado" << endl;
 }
 
 int funcaoteste2 (int envio, int envio2){
 	cout << "Teste da função 2 sendo realizado. " << "Enviado: " << envio << " e " <<  envio2 << endl;
 	return envio + envio2;
 }
 
 void passagem_de_parametro_por_referencia (int &y, int x){
	y = x + y;
 }
 
 void limpeza_terminal(){ //criei essa funcao para deixar o código menor e menos poluido //ex: limpeza_terminal();
  cout << endl << "O terminal será limpo!" << endl;
  system("PAUSE");  /// aperte qualquer tecla para continuar
  system("cls"); //apagar tela
 }
 
 void pular_linha(int numero_de_linhas){ // ex: pular_linha(1); //pula uma linha
      for(int contagem = 1; contagem <= numero_de_linhas; contagem++){
	  cout << endl;
	  }
 }
 
 /// utilizado no exemplo de uso de structs
 struct pessoa{
  int matricula;
  string cor_cabelo;
 
 };
 
 /// utilizado no exemplo de orientacao por objeto
 class estudante{
 	public:
 	int prova;
 	int teste;
 	int trabalho;
 	
 	void notas_set(int prova_set, int teste_set, int trabalho_set){
 		prova    = prova_set;
 		teste    = teste_set;
 		trabalho = trabalho_set;
	}
 	
 	int nota_final_get(){
 		return (prova + teste + trabalho)/3;
	}
 };




     /*comece a ler a partir daqui
                 \
                 \
                 v           */
 int main(){
  setlocale(LC_ALL,"Portuguese"); // permite utilizar acentuacao do portugues
  
   
  //Pagina 1
  
  cout << "|Mini kit de Dev C++ v0.9|" << " Por Luís Eduardo Ribeiro Guerra" << endl;
  
  printf("\nMatemática:\n\n");
  cout << "Quatro ao quadrado é: " << pow(4,2) << endl;
  cout << "O resto da divisão de 3 por 2 é: " << 3%2 << endl;
  cout << "5 vezes 2 é: " << 5*2 << endl;
  cout << "10 dividido por 2 é: " << 10/2 << endl;
  cout << "2x2 + (5+7)/2 = " << 2*2 + (5+7)/2 << endl;
  cout << "Raiz quadrada de 16 é: " << sqrt(16) << endl;
  cout << "3.14159 arredondado é: " << round(3.14159) << endl;
  cout << "3.14159 arredondado para cima é: " << ceil(3.14159) << endl;
  cout << "3.14159 arredondado para baixo é: " << floor(3.14159) << endl;
  cout << "Seno de 30 é: " << sin(30) << endl;
  cout << "Cosseno de 30 é: " << cos(30) << endl;
  cout << "Tangente de 30 é: " << tan(30) << endl;
  cout << "O logaritimo de 1000 na base 10 é: " << log10(1000) << endl;
  srand (time(NULL));// torna os número aleatórios realmente aleatórios, necessita de #include <time.h> 
  cout << "Número aleatório de 0 a 99: " << rand() % 100 << endl;
  cout << "Número aleatório de 1 a 100: " << rand() % 100 +1 << endl;
  cout << "Número aleatório de 25 a 50: " << rand() % 25 + 26 << endl;
  
  limpeza_terminal(); /* Decidi criar e usar uma função para
  limpar o terminal para simplificar o código, o código de limpeza esatva 
  repetido muitas vezes */
  
  
  
  
  
  
  cout << "|Página 2|" << endl;
  
  // uso do struct
  cout << "Testando struct:" << endl;
  pessoa luis;
  luis.matricula = 2019;
  luis.cor_cabelo = "castanho";
  cout << "luis.matricula = " << luis.matricula << endl;
  cout << "luis.cor_cabelo = " << luis.cor_cabelo << endl;
  
  cout << endl << "Contando até 3:" << endl;
  for (int contagem = 1; contagem <= 3; contagem++) { 
   
   cout << contagem << "\n"; /* \n pula linha*/
   if (contagem >= 3){
   	cout << "Fim da contagem." << endl;
   	pular_linha(1);
   }
  
  }
  
  
  cout << "Contagem regressiva a partir de 3:" << endl;
  for (int contagem = 3; contagem >= 1; contagem--) { 
   
   cout << contagem << "\n"; /* \n pula linha*/
   if (contagem <= 1){
   	cout << "Fim da contagem." << endl;// endl também pula linha
   	pular_linha(1);// isso é uma funcao que u criei para deixar mais fácil pular linhas
   }
  
  }
  
  cout << "Dormindo por 1000 milisegundos...." << endl;
  Sleep(1000); /// necessita do #include <windows.h> 
  cout << "Acordei" << endl;
  cout << "Representado uma aspas dupla dentro de uma string:"<<  " \" "<< endl;
  pular_linha(1);
  
 
  limpeza_terminal();
  
  
  
  
  
  cout << "|Página 3|" << endl;
    
    
  cout << "Passagem de parâmetro por referência:" << endl;
  int a = 2;
  cout << "Valor de 'a': " << a << endl;
  int b = 3;
  cout << "Valor de 'b': " << b << endl;
  cout << "Executando Passagem de parâmetro por referência dentro da função" << endl;
  cout << "y = x + y" << endl;
  cout << "'y' recebe como referência 'a'"<< endl;
  cout << "'x' recebe o valor de 'b'"<< endl;
  cout << "a = (x = b) + a" << endl;
  cout << "a = " << b << " + " << a << endl;
    
  passagem_de_parametro_por_referencia(a,b);
    
  cout << "Valor de 'a': " << a << endl;
	
	
  limpeza_terminal();
	
	
	
	
	
  cout << "|Página 4|" << endl;
  
  ///teste de funcao, as funçoes se encontram no topo antes do int main 
  funcaoteste();
  cout << "Retornado: " << funcaoteste2(3,4) << endl;
  pular_linha(1);
  
  cout << "Exemplos do uso de teclas" << endl;
  cout << "Pressione uma tecla:" << endl;
  char tecla=getche(); // aviso: o programa pausa até ser pressionada uma tecla
  //char tecla2=getch(); //nao mostra na tela qual tecla foi pressionada
  cout << endl;
  
  cout << "Pressione uma tecla:" << endl;
  char tecla2 = getch(); //nao mostra na tela qual tecla foi pressionada
  cout << "Você pressionou a tecla: " << tecla2 << endl;
  
  limpeza_terminal();
  
  
  
  
  
  
  cout << "|Página 5|" << endl;
  cout << "Arquivos:"  << endl;
  pular_linha(1);
  ///gravar arquivo
  ofstream meuarquivo("texto.txt");
  if (meuarquivo.is_open()){
        meuarquivo << "Oi"<< endl;
        meuarquivo << "Hello" <<endl;       
        meuarquivo << "Bonjour" << endl;
        meuarquivo << "Hasta la vista" << endl;
        meuarquivo.close();
        cout << "Salvei um arquivo de texto chamado texto.txt" << endl ;
  }
  
  ///ler arquivo
  ifstream meuarquivoleitura("texto.txt");
  string textoleitura;
  cout << "Olha o que está escrito no arquivo texto.txt:" << endl;
  while (getline (meuarquivoleitura, textoleitura)) {
  cout << textoleitura << endl;
  }
  meuarquivoleitura.close();
  
  pular_linha(1);
  cout << "Criando uma pasta pasta_exemplo" << endl;
  cout << "Se já houver uma pasta o cmd do Windows avisará" << endl;
  /// o system irá executar um comando no terminal cmd para criar uma pasta
  system("md \"pasta_exemplo\"");
  cout << "Renomeando o arquivo texto.txt para texto_renomeado.txt" << endl;
  cout << "Se já houver um arquivo com o mesmo nome o cmd do Windows avisará" << endl;
  system("ren texto.txt texto_renomeado.txt");
  
  ///Manipulação de arquivo
  int janela_sim_nao_notepad = MessageBox( 0, "Deseja abrir o arquivo texto_renomeado.txt no bloco de notas do Windows?", "Notepad", MB_YESNO );
  switch (janela_sim_nao_notepad){
  	case IDYES:
  		// execução de código
		// é necessario utilizar \" para representar as aspas dentro da string sem causar problemas
  		// o programa fica pausado até voce finalizar o bloco de notas
  		cout << "Feche o bloco de notas para despausar o programa" << endl;
		system("Notepad \"texto_renomeado.txt\"");
        
		break;
    case IDNO:
    	// execução de código
        cout << "Você não quis abrir arquivo texto_renomeado.txt" << endl;
        break;
  }
  
  int janela_sim_nao_txt = MessageBox( 0, "Deseja deletar o arquivo texto_renomeado.txt?", "Deletar", MB_YESNO );
  switch (janela_sim_nao_txt){
  	case IDYES:
  		// execução de código
  		cout << "Você deletou o arquivo texto_renomeado.txt" << endl;
		system("del texto_renomeado.txt");
        break;
    case IDNO:
    	// execução de código
        cout << "Você não quis deletar arquivo texto_renomeado.txt" << endl;
        break;
  }
  
  
  limpeza_terminal();

  
  
  
  
  
  cout << "|Página 6|" << endl;
  pular_linha(1);
  cout << "Arrays:" << endl;
  pular_linha(1);
  cout << "Exemplo de array de string de 1X4 como lista de compras:" << endl;
  string array_string_lista_de_compras[4] = {"Coxinha", "Suco", "Bolo", "Fanta Uva"};
  cout << "Primeiro item da lista, número 0: " << array_string_lista_de_compras[0] << endl;
  cout << "Alterando o primeiro item da lista" << endl;
  array_string_lista_de_compras[0] = "Pizza";
  cout << "Primeiro item da lista, número 0: " << array_string_lista_de_compras[0] << endl;
  cout << "Último item da lista, número 3: "   << array_string_lista_de_compras[3] << endl;
  cout << "Lendo todo o Array de String 1x4 da lista de compras:" << endl;
  for (int contagem = 0; contagem < 4; contagem++) {
  	cout << array_string_lista_de_compras[contagem] << " ";
  }
  pular_linha(2);
  
  cout << "Exemplo de array de char (caracteres) de 3X4 como matriz:" << endl;
  cout << "Definindo a matriz..." << endl;
  char array_char_matriz [3] [4] = 
	{{'-','=','=','-'},
	 {'|','o','i','|'},
	 {'-','=','=','-'}};
  
  cout << "Renderizando a matriz linha por linha:" << endl;
  int tamanho_horizontal = 4;
  int tamanho_vertical = 3;
  for (int contagem_vertical = 0; contagem_vertical < tamanho_vertical; contagem_vertical++) {
  	
  	for (int contagem_horizontal = 0; contagem_horizontal < tamanho_horizontal; contagem_horizontal++){
  		
	  cout << array_char_matriz[contagem_vertical][contagem_horizontal];
	  
	}
    pular_linha(1); //pulando a linha depois de escrito a respectiva linha 	  
  }
  pular_linha(1);
  
  cout << "Uma string funciona parecido com um array:" << endl;
  cout << "Defini uma string escrito (cavalo branco)" << endl;
  string exemplo_string = "cavalo branco";
  cout << "A primeira letra (caractere) da string, na posição 0, é: " << exemplo_string[0] << endl;
  cout << "O tamanho da string é: " << exemplo_string.size() << " caracteres" << endl;
  cout << "A última letra (caractere) da string, na posição 0, é: " << exemplo_string[ exemplo_string.size() -1 ] << endl;
  cout << "Soletrando:" << endl;
  for (int contagem = 0; contagem < exemplo_string.size(); contagem++){
  	cout << exemplo_string[contagem] << "_";
  }
  pular_linha(1);
  
  limpeza_terminal();
  
  
  
  
  
  
  cout << "|Página 7|" << endl;
  cout << endl << "Vetor e iterador:" << endl;
  cout << "Declarando vetor de inteiros (vetor_exemplo)" << endl;
  vector<int> vetor_exemplo;
  cout << "Testando se o vetor está vazio (1 = verdadeiro 0 = falso):" << vetor_exemplo.empty() << endl;
  cout << "Adicionando o valor 2 ao vetor" << endl;
  vetor_exemplo.push_back(2);
  cout << "Adicionando o valor 4 ao vetor" << endl;
  vetor_exemplo.push_back(4);
  cout << "Adicionando o valor 8 ao vetor" << endl;
  vetor_exemplo.push_back(8);
  cout << "Primeiro valor do vetor: " << vetor_exemplo[0] << endl;;
  cout << "Tamanho do vetor:" << vetor_exemplo.size() << endl;
  cout << "Último valor do vetor: " << vetor_exemplo[ vetor_exemplo.size() - 1] << endl;
  cout << "Removendo o último valor do vetor" << endl;
  vetor_exemplo.pop_back();
  cout << "Tamanho do vetor:" << vetor_exemplo.size() << endl;
  cout << "Último valor do vetor: " << vetor_exemplo[ vetor_exemplo.size() - 1] << endl;
  cout << "Testando se o vetor está vazio (1 = verdadeiro 0 = falso):" << vetor_exemplo.empty() << endl;
  cout << "Declarando um iterador (iterador_exemplo)" << endl;
  vector<int>::iterator iterador_exemplo;
  cout << "Colocando o iterador no início do vetor" << endl;
  iterador_exemplo = vetor_exemplo.begin();
  cout << "Valor do vetor onde o iterador se encontra: "<< *iterador_exemplo << endl;
  cout << "Movendo o iterador uma posição para frente" << endl;
  iterador_exemplo++;
  cout << "Valor do vetor onde o iterador se encontra: "<< *iterador_exemplo << endl;
  cout << "Movendo o iterador uma posição para trás" << endl;
  iterador_exemplo--;
  cout << "Valor do vetor onde o iterador se encontra: "<< *iterador_exemplo << endl;
  cout << "Colocando o iterador no final do vetor" << endl;
  iterador_exemplo = vetor_exemplo.end();
  cout << "Valor do vetor onde o iterador se encontra: "<< *(iterador_exemplo-1) << endl;
  
  
  limpeza_terminal();
  
  
  
  
  
  
  cout << "|Página 8|" << endl;
  
  /// a classe estudante voce encontra no topo do codigo acima do int main
  cout << "Orientação a objetos:"  << endl;
  cout << "Declarando o aluno Miguel da classe estudante"  << endl;
  estudante Miguel;
  cout << "Declarando a aluna Beatriz da classe estudante" << endl;
  estudante Beatriz;
 	
  cout << "Definindo as notas do Miguel" << endl;
  Miguel.prova = 80;
  Miguel.teste = 70;
  Miguel.trabalho = 60;
  cout << "Definindo as notas da Beatriz com o método set" << endl;
  Beatriz.notas_set(/*prova_set:*/ 90 , /*teste_set:*/ 80 , /*trabalho_set:*/ 70);
 	
  cout << "Nota final Miguel: "   << Miguel .nota_final_get() << endl;
  cout << "Nota final Beatriz: "  << Beatriz.nota_final_get() << endl;
  
  
  limpeza_terminal();
  
  
  
  
  
  
  cout << "|Página 9|" << endl;
  
  cout << "Executando caixas de aviso..." << endl;
  /////https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox
  MessageBox( 0, "Atenção!\nComi o bolo de quem está lendo", "Atenção titulo", 0 | MB_ICONEXCLAMATION ); //icone de "!" em um triangulo amarelo
  MessageBox( 0, "Linha 1\nLinha 2", "janela_erro titulo", 0 | MB_ICONERROR ); //icone de "x" em uma bola vermelha
  MessageBox( 0, "Linha 1\nLinha 2", "janela_interrogação titulo", 0 | MB_ICONQUESTION ); //icone de "?" em uma bola azul
  MessageBox( 0, "Linha 1\nLinha 2", "janela_informação titulo", 0 | MB_ICONINFORMATION ); //icone de "i" em uma bola azul
  MessageBox( 0, "Linha 1\nLinha 2", "janela_sem_icone titulo", 0); // sem icone

  // janela que responde aos comandos
  
  int janela_sim_nao_cancelar = MessageBox( 0, "Linha 1\nLinha 2", "janela_sim_nao_cancelar titulo", MB_YESNOCANCEL ); 
  switch (janela_sim_nao_cancelar){
  	case IDYES:
  		//codigo
        cout << "janela_sim_nao_cancelar: Você selecionou sim" << endl;
        break;
    case IDNO:
    	//codigo
        cout << "janela_sim_nao_cancelar: Você selecionou não" << endl;
        break;
    case IDCANCEL:
    	//codigo
        cout << "janela_sim_nao_cancelar: Você selecionou cancelar" << endl;
        break;
  }
  
  int janela_anular_repetir_ignorar = MessageBox( 0, "Linha 1\nLinha 2", "janela_anular_repetir_ignorar titulo", MB_ABORTRETRYIGNORE );
   switch (janela_anular_repetir_ignorar){
  	case IDABORT:
  		//codigo
  		cout << "janela_anular_repetir_ignorar: Você selecionou anular" << endl;
        break;
    case IDRETRY:
    	//codigo
        cout << "janela_anular_repetir_ignorar: Você selecionou repetir" << endl;
        break;
    case IDIGNORE:
    	//codigo
        cout << "janela_anular_repetir_ignorar: Você selecionou ignorar" << endl;
        break;
  }
  
  int janela_ok_cancelar = MessageBox( 0, "Linha 1\nLinha 2", "janela_ok_cancelar titulo", MB_OKCANCEL );
  switch (janela_ok_cancelar){
  	case IDOK:
  		//codigo
  		cout << "janela_ok_cancelar: Você selecionou ok" << endl;
        break;
    case IDCANCEL:
        //codigo
        cout << "janela_ok_cancelar: Você selecionou cancelar" << endl;
        break;
  }
  
  int janela_repetir_cancelar = MessageBox( 0, "Linha 1\nLinha 2", "janela_repetir_cancelar titulo", MB_RETRYCANCEL ); 
  switch (janela_repetir_cancelar){
  	case IDRETRY:
        cout << "janela_repetir_cancelar: Você selecionou repetir" << endl;
        break;
    case IDCANCEL:
    	cout << "janela_repetir_cancelar: Você selecionou cancelar" << endl;
        break;
  }
  
  int janela_cancelar_tentar_continuar = MessageBox( 0, "Linha 1\nLinha 2", "janela_cancelar_tentar_continuar titulo", MB_CANCELTRYCONTINUE );
   switch (janela_cancelar_tentar_continuar){
  	case IDCANCEL:
  		//codigo
  		cout << "janela_cancelar_tentar_continuar: Você selecionou cancelar" << endl;
        break;
    case IDTRYAGAIN:
    	//codigo
        cout << "janela_cancelar_tentar_continuar: Você selecionou tentar" << endl;
        break;
    case IDCONTINUE:
    	//codigo
        cout << "janela_cancelar_tentar_continuar: Você selecionou continuar" << endl;
        break;
  }
  
  
  limpeza_terminal();
  
  ///  animacao
  bool rodando_animacao = true;
  int intervaulo_animacao = 100; // em milisegundos
  int animacao_ciclos = 0;
  while ( rodando_animacao == true /*true ou false ou alguma condicao*/ ) {
  	
  cout << "|" << "\n";
  Sleep(intervaulo_animacao);
  system("cls"); //apagar tela
  cout << "/" << "\n";
  Sleep(intervaulo_animacao);
  system("cls"); //apagar tela
  cout << "-" << "\n";
  Sleep(intervaulo_animacao);
  system("cls"); //apagar tela
  cout << "\\" << "\n";
  Sleep(intervaulo_animacao);
  system("cls"); //apagar tela
  animacao_ciclos++;
  if (animacao_ciclos >= 4){
   rodando_animacao = false;
   //break; //interrompe o while
   }
  }
  // fim do codigo da animacao
  
  
  
  
  
  
  cout << "|Página 10|" << endl;
  
  cout << "Som de aviso do windows" << endl;
  cout << '\a'; //som de aviso
  
  Sleep(2000); /// necessita do #include <windows.h> 
   
  cout << "Beep de frequencia" << endl; 
  //Beep(frequência,duração); 
  
  printf("Dó\n") ;  // printf (""); funciona parecido com o cout << "";
  Beep (261, 500);

  printf("Ré\n");
  Beep (293, 500);

  printf("Mi\n");
  Beep (329, 500);

  printf("Fá\n");
  Beep (349, 500);

  printf("Sol\n");
  Beep (392, 500);

  printf("Lá\n");
  Beep (440, 500);

  printf("Si\n");
  Beep (493, 500);
  
  
  int janela_sim_nao = MessageBox( 0, "Deseja abrir o link no seu navegador padrão?", "Link", MB_YESNO );
  switch (janela_sim_nao){
  	case IDYES:
  		/// o system executa um comando de terminal cmd, isso é algo bem util
  		system("start https://github.com/luisrguerra/devcpp-ptbr-mini-kit-cpp");
        break;
    case IDNO:
        cout << "Você não quis abrir o link no seu navegador padrão" << endl;
        break;
  }
  
  int janelafinal = MessageBox( 0, "Deseja reiniciar o programa?", "Reinicialização", MB_RETRYCANCEL ); 
  switch (janelafinal){
  	case IDRETRY:
        cout << "Reiniciando...." << endl;
        Sleep(3000); /// necessita do #include <windows.h> 
        system("cls"); //apagar tela
        main();  
        /*chamar a funcao main dentro do main faz o 
        programa reiniciar, dependendo da situcao, deixando 
        ele em looping */
        break;
    case IDCANCEL:
    	cout << "Finalizando o programa...." << endl;
        return 0; //finalizando o programa
        break;
  }
  
  
  
  return 0;
 }

 

mudar_cor_kit_UX_dev_c++_v0.1.cpp:

#include <locale.h>// para o idioma em portguês
#include <iostream>// textos no terminal
//#include <conio.h>
#include <windows.h> //para mudar as cores
using namespace std;

   /*Luis Eduardo Ribeiro Guerra
      Mudar Cor UX kit de Dev C++ v0.1   */
   /* feito no Dev-C++ 5.11 para livre uso creativo e distribuição*/
   /* Contato: [email protected] */
   /*Github com códigos fontes e atualizações:
     https://github.com/luisrguerra/devcpp-ptbr-mini-kit-cpp
                                                           */

enum cmd_cores {
    /*0*/cor_preto,           /*1*/cor_azul,           /*2*/cor_verde,        /*3*/cor_ciano,
	/*4*/cor_vermelho,        /*5*/cor_magenta,        /*6*/cor_marrom,       /*7*/cor_cinza_claro, 
	/*8*/cor_cinza,           /*9*/cor_azul_claro,     /*10*/cor_verde_claro, /*11*/cor_ciano_claro, 
	/*12*/cor_vermelho_claro, /*13*/cor_magenta_claro, /*14*/cor_amarelo,     /*15*/cor_branco,
	corteste};
	
void cor_texto (cmd_cores iColor){
    HANDLE hl = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO bufferInfo;
    BOOL b = GetConsoleScreenBufferInfo(hl, &bufferInfo);
    bufferInfo.wAttributes &= 0x00F0;
    SetConsoleTextAttribute (hl, bufferInfo.wAttributes |= iColor);
}

void cor_fundo (cmd_cores iColor){
    HANDLE hl = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO bufferInfo;
    BOOL b = GetConsoleScreenBufferInfo(hl, &bufferInfo);
    bufferInfo.wAttributes &= 0x000F;
    SetConsoleTextAttribute (hl, bufferInfo.wAttributes |= (iColor << 4));
}

void trocar_cor_padrao_cmd_rgb(int cor,int red,int green,int blue){
    CONSOLE_SCREEN_BUFFER_INFOEX info;
    info.cbSize = sizeof(CONSOLE_SCREEN_BUFFER_INFOEX);

    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleScreenBufferInfoEx(hConsole, &info);
    
    info.ColorTable[cor] = RGB (red,green,blue);
    
	SetConsoleScreenBufferInfoEx(hConsole, &info);
}
void desabilitar_cursor(bool habilitado){
	HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);

    CONSOLE_CURSOR_INFO     cursorInfo;

    GetConsoleCursorInfo(out, &cursorInfo);
    cursorInfo.bVisible = habilitado -1; 
    SetConsoleCursorInfo(out, &cursorInfo);
}

void imprimir_texto_colorido(cmd_cores cor,std::string texto){
	cor_texto (cor);
	cor_fundo (cor_preto);
	std::cout << texto;
	cor_texto (cor_cinza_claro);
}
void imprimir_texto_colorido(cmd_cores cor,cmd_cores fundo,std::string texto){
	cor_texto (cor);
	cor_fundo (fundo);
	std::cout << texto;
	cor_texto (cor_cinza_claro);
	cor_fundo (cor_preto);
}


int main () {
	setlocale(LC_ALL,"Portuguese");
	
	cout << "Kit UX para Mudar Cor do CMD no Dev C++ V0.1"<< endl;
	cout << "Por Luís Eduardo Ribeiro Guerra"             << endl;
	
	cor_texto(cor_azul);
	cout << "Texto Azul"           << endl;
	
	cor_texto(cor_azul_claro);
	cout << "Texto Azul Claro"     << endl;
	
	cor_texto(cor_ciano);
	cout << "Texto Ciano"          << endl;
	
	cor_texto(cor_ciano_claro);
	cout << "Texto Ciano Claro"    << endl;
	
	cor_texto(cor_vermelho);
	cout << "Texto Vermelho"       << endl;
	
	cor_texto(cor_vermelho_claro);
	cout << "Texto Vermelho Claro" << endl;
	
	cor_texto(cor_magenta);
	cout << "Texto Magenta"        << endl;
	
	cor_texto(cor_magenta_claro);
	cout << "Texto Magenta Claro"  << endl;
	
	cor_texto(cor_verde);
	cout << "Texto Verde"          << endl;
	
	cor_texto(cor_verde_claro);
	cout << "Texto Verde Claro"    << endl;
	
	cor_texto(cor_amarelo);
	cout << "Texto Amarelo"        << endl;

	cor_texto(cor_marrom);
	cout << "Texto Marrom"         << endl;
	
	cor_texto(cor_cinza);
	cout << "Texto Cinza Escuro"   << endl;
	
	cor_texto(cor_cinza_claro);
	cout << "Texto Cinza Claro"    << endl;
	
	cor_texto(cor_branco);
	cout << "Texto Branco"         << endl;
	
	
	cor_texto(cor_preto);
	cor_fundo(cor_branco);
	cout << "Texto Preto, Fundo Branco "         << endl;
	
	cor_texto(cor_preto);
	cor_fundo(cor_azul);
	cout << "Texto Preto, Fundo Azul "           << endl;
	
	cor_texto(cor_preto);
	cor_fundo(cor_azul_claro);
	cout << "Texto Preto, Fundo Azul Claro "     << endl;
	
	cor_texto(cor_preto);
	cor_fundo(cor_ciano);
	cout << "Texto Preto, Fundo Ciano "          << endl;
	
	cor_texto(cor_preto);
	cor_fundo(cor_ciano_claro);
	cout << "Texto Preto, Fundo Ciano Claro "    << endl;
	
	cor_texto(cor_preto);
	cor_fundo(cor_vermelho);
	cout << "Texto Preto, Fundo Vermelho "       << endl;
	
	cor_texto(cor_preto);
	cor_fundo(cor_vermelho_claro);
	cout << "Texto Preto, Fundo Vermelho Claro " << endl;
	
	cor_texto(cor_preto);
	cor_fundo(cor_magenta);
	cout << "Texto Preto, Fundo Magenta "        << endl;
	
	cor_texto(cor_preto);
	cor_fundo(cor_magenta_claro);
	cout << "Texto Preto, Fundo Magenta Claro "  << endl;
	
	cor_texto(cor_preto);
	cor_fundo(cor_verde);
	cout << "Texto Preto, Fundo Verde "          << endl;
	
	cor_texto(cor_preto);
	cor_fundo(cor_verde_claro);
	cout << "Texto Preto, Fundo Verde Claro "    << endl;
	
	cor_texto(cor_preto);
	cor_fundo(cor_amarelo);
	cout << "Texto Preto, Fundo Amarelo "        << endl;
	
	cor_texto(cor_preto);
	cor_fundo(cor_marrom);
	cout << "Texto Preto, Fundo Marrom "         << endl;
	
	cor_texto(cor_preto);
	cor_fundo(cor_cinza);
	cout << "Texto Preto, Fundo Cinza Escuro "   << endl;
	
	cor_texto(cor_preto);
	cor_fundo(cor_cinza_claro);
	cout << "Texto Preto, Fundo Cinza Claro "    << endl;
	
	cor_texto(cor_branco);
	cor_fundo(cor_preto);
	cout << "Texto Branco, Fundo Preto "         << endl;
	
	cout << "Arco-íris:" << endl;
	cor_fundo(cor_vermelho);
	cout << " ";
	cor_fundo(cor_vermelho_claro);
	cout << " ";
	cor_fundo(cor_marrom);
	cout << " ";
	cor_fundo(cor_verde);
	cout << " ";
	cor_fundo(cor_azul_claro);
	cout << " ";
	cor_fundo(cor_azul);
	cout << " ";
	cor_fundo(cor_magenta);
	cout << " " << endl;
	
	trocar_cor_padrao_cmd_rgb(/*cor:*/cor_azul,/*red:*/26,/*green:*/35,/*blue:*/126);
	cor_fundo(/*cor:*/cor_azul);
	cout << "Azul RGB(26,35,126)" << endl;
	
	trocar_cor_padrao_cmd_rgb(cor_vermelho_claro,255,82,82);
	cor_fundo(cor_vermelho_claro);
	cout << "Vermelho claro RGB(255,82,82)" << endl;
	
	trocar_cor_padrao_cmd_rgb(cor_verde,51,105,30);
	cor_fundo(cor_verde);
	cout << "Verde RGB(51,105,30)" << endl;
	
	imprimir_texto_colorido(/*cor texto:*/cor_vermelho_claro,/*texto:*/"Texto\n");
	
	imprimir_texto_colorido(/*cor texto:*/cor_verde_claro,/*cor fundo:*/cor_azul ,/*texto:*/"Texto\n");
	
	cout << "Desativando o cursor que pisca" << endl;
	desabilitar_cursor(true);
	
	system("PAUSE");
	//link para o GitHub
	system("start https://github.com/luisrguerra/devcpp-ptbr-mini-kit-cpp");
	
	return 0;
}

mini_kit_c++_v0.9.pdf mudar_cor_kit_UX_dev_c++_v0.1.pdf

  • Obrigado 1
Postado

Aqui tem um exemplo bem simples, que desenha vários objetos na tela:

#define WIN32_LEAN_AND_MEAN             // Excluir itens raramente utilizados dos cabeçalhos do Windows
#include <windows.h>
// Variáveis Globais:
HINSTANCE hInst;                                // instância atual
HWND hWnd;                                     // Janela atual
HBITMAP hbitmap = NULL;
COLORREF color = 0;
HBRUSH hbr = CreateSolidBrush(color);


// Declarações de encaminhamento de funções incluídas nesse módulo de código:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    MyRegisterClass(hInstance);

    // Realize a inicialização do aplicativo:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }

    MSG msg;
    //Desenho    
    HDC hdc = GetDC(hWnd);
    BITMAP bm;
    
    
    MoveToEx(hdc, 8, 60, NULL);
    LineTo(hdc, 8, 260);
    RECT rect = { 100, 100, 200, 200 };
    FrameRect(hdc, &rect, hbr);
   

    
   
    TextOut(hdc, 100, 100, L"Hello Word", wcslen(L"Hello Word"));

    
    // Loop de mensagem principal:
    do
    {
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }        
    } while (msg.message != WM_QUIT);

    return (int) msg.wParam;
  
}




ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEXW wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);

    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon = NULL;
    wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName = NULL;
    wcex.lpszClassName = L"Teste";
    wcex.hIconSm = NULL;

    return RegisterClassExW(&wcex);
}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   hInst = hInstance; // Armazenar o identificador de instância em nossa variável global

    hWnd = CreateWindowW(L"Teste", L"Teste", WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);


   return TRUE;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY:
        DeleteObject(hbr);
        DeleteObject(hbitmap);
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

O grosso do código é da criação da janela, as rotinas de desenho são bem simples.

Para carregar e desenha um bitmap na tela:

 //Carrega e desenha BITMAP na tela
    hbitmap = (HBITMAP)LoadImage(NULL, L"bitmap.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    if (hbitmap != NULL) {
        HDC hdc_source = CreateCompatibleDC(hdc);
        GetObject(hbitmap, sizeof(BITMAP), &bm);
        SelectObject(hdc_source, hbitmap);
        BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdc_source, 0, 0, SRCCOPY);        
    }

 

O ideal é que se desenhe quando for gerado um evento WM_PAINT:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
	case WM_PAINT:
		PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hWnd, &ps);
		// TODO: Adicione qualquer código de desenho que use hdc aqui...
        EndPaint(hWnd, &ps);
	break;
    case WM_DESTROY:
        DeleteObject(hbr);
        DeleteObject(hbitmap);
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

 

  • Obrigado 2
Postado
16 horas atrás, devair1010 disse:

@luis_r.guerra    Olá  ,  estou querendo um código  para desenhar  uma linha na tela ,  e imprimir um desenho bitmap na tela ,  você teria algum .? 

 

Acho que já postei isso antes. Veja em https://github.com/microsoft/Windows-classic-samples 

direto do fornecedor, exemplos antigos de código em C ou C++ para qualquer coisa em Windows do jeito '90 

 

Para tratar imagens na tela sugiro fugir do modelo event loop/mensagens clássico da API do Windows. Não é um modelo produtivo. 

 

Vai ter muito mais sucesso com coisas como Allegro, GTK+, Qt, SDL ou wxWidgets. São mais simples e mais produtivas e todas funcionam de modo bem semelhante, ao menos até onde eu já usei. Se não fizer questão de C/C++ .Net é bem fácil, ao menos para usar os controles do Windows.

 

Em geral essas ferramentas tem um "designer", um formulário onde você pode ajustar graficamente os componentes na tela e ele gera os links para as rotinas que tratam os eventos. Coisas como o designer do Delphi, do Office, do .net, o Creator do Qt...

Veja o designer do Office, dentro do Outlook:
 

image.png.f39c52cece6f9fb5151cdbce51f91fda.png

 

Então não tem muito incentivo para fazer isso em C ou C++ sem usar essas ferramentas, e nem mesmo para usar essas linguagens quando a performance não importa. E no caso de aplicações interativas a performance não importa mesmo. Por isso não há bom suporte a isso dentro de C ou C++ em Windows mesmo. Aplicações desse tipo sã escritas em outras linguagens.


Pode ser ruim de compilar inicialmente mas acho que vale a pena. Se quer sossego use vcpkg da Microsoft, que instala qualquer coisa com um único comando e sem intervenção do usuário. Algo como
 

    vcpkg install qt5


E você toma um café e volta de pois de uns 5 minutos e está tudo compilado e instalado e todo novo programa pode usar os #include e compilar e tudo funciona. Um passeio. Eis algumas das mais de 900 bibliotecas disponíveis lá:

 

allegro5             5.2.6.0          Allegro is a cross-platform library mainly aimed at video game and multimedia ...
cairo                1.16.0#7         Cairo is a 2D graphics library with support for multiple output devices. Curre...
gtk                  3.22.19-4        Portable library for creating graphical user interfaces.
opengl               0.0-7            Open Graphics Library (OpenGL)[3][4][5] is a cross-language, cross-platform ap...
qt5                  5.15.0#2         Qt5 Application Framework
sdl2                 2.0.12#4         Simple DirectMedia Layer is a cross-platform development library designed to p...
wxwidgets            3.1.4#3          wxWidgets is a widget toolkit and tools library for creating graphical user in...

 

  • Amei 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...