Ir ao conteúdo
  • Cadastre-se

C Como fechar somente a janela do allegro 4


erique

Posts recomendados

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.

Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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...