[Opengl][Glut][Dev- C++ 4.9.9.2] Comment fermer un programme correctement ? [Résolu]

Signaler
Messages postés
99
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
17 septembre 2005
-
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007
-
Bonjour a tous,

La question est celle ci : comment je peux faire pour fermer mon programme correctement si je veux faire un programme completement portable ?

Si je cree un projet avec Dev-C++ pour OpenGL et Glut il m'ouvre une fenetre ms-dos et ne ferme pas celle ci reste a l'ecran meme si je quitte mon programme ...

Je ne veux pas utiliser les instructions windows pour quitter puisque je voudrais faire du code portable.

J'espere avoir ete clair

Merci d'avance

10 réponses

Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

Extrait de glut.h



#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)

#define GLUT_WINDOW_FORMAT_ID ((GLenum) 123)

#endif





alors peut etre essai de télécharger une nouvelle version ou remplace :



void Idle(){

if(glutGet(GLUT_WINDOW_FORMAT_ID)==0) exit(0);

}



par:



void Idle(){

if(glutGet(GLUT_WINDOW_X)==0 && glutGet(GLUT_WINDOW_Y)==0) exit(0);

}
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
La fenetre CMD est optionnelle, avec visual studio dans les links : subsystem:console (pour avoir une console) ou subsystem:windows pour ne rien avoir....

KeniiyK
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

Hello,



Bon avec Dev-cpp pour ne pas voir la console il faut aller dans le menu
projet -> option de projet et puis dans l'onglet général choisis le
type "Win32GUI", et puis clique sur OK. Recompile tout et maintenent tu
ne devrait plus avoir de console.
Messages postés
99
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
17 septembre 2005

Effectivement je n'ai plus de console mais le programme n'est pas fermé completement.

Dans Dec-c++ je dois aller dans le menu Executer / Fermer programme pour le fermer definitivement.

Ca m'inquiete de lancer un programme et de ne pas l'arreter completement.

je suppose qu'il traine toujours un peu dans la memoire de l'ordi ...

A moins que je me trompe completement ?
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

Essai d'utiliser la commande " exit(0); " , je crois qu'elle est portable.
Messages postés
99
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
17 septembre 2005

non cela ne marche pas plus.

j'ai mis mis exit(0); a la place de return (0); aucun changement
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

J'ai trouvé une solution :



rajoute ceci dans ta fonction main si tu n'as pas de fonction Idle (ajoute-le avant glutMainLoop();) :



glutIdleFunc(Idle);



Puis rajoute cette fonction avant ta fonction main :



void Idle(){

if(glutGet(GLUT_WINDOW_FORMAT_ID)==0) exit(0);

}



Si tu as déja une fonction Idle ajout simplement ce code dans ta fonction Idle :



if(glutGet(GLUT_WINDOW_FORMAT_ID)==0) exit(0);



exemple bidon:



#include <GL/glut.h>

#include <stdlib.h>

#include <stdio.h>



void affichage(){

glutSwapBuffers();

}



void Idle(){

if(glutGet(GLUT_WINDOW_FORMAT_ID)==0) exit(0);

}



int main(int argc,char **argv)

{

// initialisation de glut et creation de la fenetre

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

glutInitWindowPosition(10,10);

glutInitWindowSize(640,480);

glutCreateWindow("Test");



// Initialisation d'OpenGL

glClearColor(0.0,0.0,0.0,0.0);




// Enregistrement des fonctions de rappel

glutDisplayFunc(affichage);

glutIdleFunc(Idle);



// Entree dans la boucle principale glut

glutMainLoop();

return 0;

}
Messages postés
99
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
17 septembre 2005

merci de tes recherches, j'ai bien cru que tu avais la reponse.
mais
HELAS Je ne comprend pas pourquoi il ne veut pas de :

GLUT_WINDOW_FORMAT_ID

j'ai refait un projet vierge avec ton code et j'obtiens :

Compilateur: Default compiler
Building Makefile: "C:\Dev-Cpp\Makefile.win"
Exécution de make...
make.exe -f "C:\Dev-Cpp\Makefile.win" all
g++.exe -c mainfermertureportable.cpp -o mainfermertureportable.o


mainfermertureportable.cpp: In function `void Idle()':
mainfermertureportable.cpp:10: error: `GLUT_WINDOW_FORMAT_ID' undeclared (first use this function)
mainfermertureportable.cpp:10: error: (Each undeclared identifier is reported only once for each function it appears in.)


make.exe: *** [mainfermertureportable.o] Error 1


Exécution terminée
Messages postés
99
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
17 septembre 2005

merci merci

ca marche pour la deuxieme version
void Idle(){
if(glutGet(GLUT_WINDOW_X)==0 && glutGet(GLUT_WINDOW_Y)==0) exit(0);
}

je n'arrive pas a installer la version 3.7 de glut .Je galere depuis ce matin (depuis que tu m'as parlé de : GLUT_WINDOW_FORMAT_ID.)

je dois juste mettre le nouveau fichier glut.h a la place de l'autre ?
ou y a t'il d'autres fichiers a remplacer ?
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

Oui, il peut-être encore les fichiers libglut32.a et libglut.a (et la dll glut32.dll), bon j'suis pas certain.