Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
erique

C Como fechar somente a janela do allegro 4

Recommended Posts

Tenho um cenário atualmente, onde eu abro um programa em C, é dentro dele tem uma função que chama o allegro para abrir em determinado momento, porém não estou conseguindo fechar corretamente o allegro.

 

O que eu fiz foi criar essa função chamada de fechar

void fechar(){
   allegro_exit();
}

é chamei essa função, habilitando o botão de fechar do allegro pelo comando

 

        set_close_button_callback(fechar);
Porém, creio que deveria fazer algo a mais, pois a janela do allegro "finge" que fecha, mas continua bugada na barra de ferramentas do windows, só fecha mesmo quando eu fecho o cmd.

 

Alguma sugestão pra melhorar isso?, resolveria também com um ESQ, mas queria habilitar o botão de fechar para ficar mais fácil.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta fechar o programa com exit:

void fechar(){
   allegro_exit();
   exit(0);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 13 horas atrás, TYSQUARE89 disse:

    Tenta fechar o programa com exit:

    
    void fechar(){
       allegro_exit();
       exit(0);
    }

     

    Sem sucesso, continua bugado :/

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Acho que não funciona chamando uma função do C++, tem que usar as próprias callback do Allegro para fechar no X.

     

    Algo mais ou menos assim:

     

    #include <allegro.h>
    
    volatile int saiu = false;
    void fechar() { saiu = true; }
    END_OF_FUNCTION(fechar)
    
    int main()
    {
      allegro_init();
      install_keyboard();
      set_color_depth(32);
      set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
      set_window_title("Teste");
    
      LOCK_FUNCTION(fechar);
      set_close_button_callback(fechar);
    
      while (!saiu) {}
    }
    END_OF_MAIN();

     

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 10 horas atrás, Benjamin Breeg disse:

    Acho que não funciona chamando uma função do C++, tem que usar as próprias callback do Allegro para fechar no X.

     

    Algo mais ou menos assim:

     

    
    #include <allegro.h>
    
    volatile int saiu = false;
    void fechar() { saiu = true; }
    END_OF_FUNCTION(fechar)
    
    int main()
    {
      allegro_init();
      install_keyboard();
      set_color_depth(32);
      set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
      set_window_title("Teste");
    
      LOCK_FUNCTION(fechar);
      set_close_button_callback(fechar);
    
      while (!saiu) {}
    }
    END_OF_MAIN();

     

     

     

    Entendi, o meu não roda somente com isso, um inteiro que definiu pra saiu, ele não reconhece o false, a menos que essa volatile antes do int, modifique para um tipo boolean, que tentei tmb, mas não deu muito certo.

     

    O meu allegro é 4.2 não o 5 (não sei qual é a sua)

     

    iFg4k217Q56qSvN0qSHWNg.png

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @erique esse false/true só é reconhecido no C++, no caso use o arquivo .cpp, se não funcionar, use FALSE/TRUE.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 19 horas atrás, Benjamin Breeg disse:

    Falha minha para C coloque:

     

    #include <stdbool.h>

     

    Dei certo, porém apenas habilitou o botão também, e não fecha apertando, somente com o ESQ

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Resolução definitiva:

     

    Váriavel global, como estava fazendo

    volatile int exit_program;
    void fecha_programa() { exit_program = TRUE; }
    END_OF_FUNCTION(fecha_programa)

    e, esse código onde quer que habilite para fechar.

    	exit_program = FALSE;
        LOCK_FUNCTION(fecha_programa);
        LOCK_VARIABLE(exit_program);
        set_close_button_callback(fecha_programa);

     

    Falto só trancar a variável, @Benjamin Breeg

     

    Deu tudo certo, obrigado pelo help

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×