# Documentation de la bibliothèque MLV-0.6.705

- Presentation
- Téléchargement
- Installation
- Compilation
- Exemples
- API
- Liste des fonctions
- bogues
- contacts

# medium/05_exit.c

Ce programme montre comment il est possible de faire arrêter proprement un programme lorsque l'utilisateur demande son arrêt en appuyant sur la croix de la fenêtre, ou en envoyant un signal sytème d'arret du programme.

    #include <MLV/MLV_all.h>

    //
    // exit_function est la fonction de call back qui sera appelée par la librairie
    // MLV au moment où l'utilisateur demandera à l'application de s'arrêter
    // en utilisant un signal d'arrêt ou en appuyant sur la croix de la
    // fenêtre.
    //
    void exit_function( void* data ){
            int* arret = (int*)  data;
            *arret = 1;
    }

    void affichage( int width, int height ){
            int elapsed_time;
            int message_size = 100;
            char message[ message_size ];

            //
            // On nettoie l'écran
            //
            MLV_draw_filled_rectangle( 0, 0, width, height, MLV_COLOR_BLACK );

            //
            // Affichage du texte explicatif.
            //
            MLV_draw_adapted_text_box(
                    10, 100,
                    "Ce programme ne s'arête pas.\nToutefois, vous pouvez fermer le programme en fermant simplement la fenêtre.\n A ce moment là il est possible,\n à l'aide d'une fonction de rappel,\n d'exécuter un dernier code.",
                    9,
                    MLV_COLOR_RED, MLV_COLOR_GREEN, MLV_COLOR_BLACK,
                    MLV_TEXT_CENTER
            );

            //
            // On recupère le temps d'execution depuis le debut du programme
            //
            elapsed_time =  MLV_get_time();

            //
            // un message d'impatiente à l'écran
            //
            snprintf(
                    message,  message_size,
                    "Ca fait %d secondes que j'attends que vous quittiez ce programme.",
                    elapsed_time/1000
            );
            MLV_draw_text(
                    10, 400,
                    message,
                    MLV_COLOR_GREEN
            );

            //
            // Mise à jour de l'affichage
            //
            MLV_actualise_window();
    }

    //
    // Attention !
    // Pour pouvoir compiler ce programme sous windows et sous macintosh,
    // il faut, pour la déclaration du main, respecter strictement la syntaxe
    // suivante :
    //
    int main(int argc, char *argv[]){
            int arret = 0;
            int width = 640, height = 480;
            //
            // On enregistre la fonction de call back exit_function
            // dans la librairie MLV.
            // Cette ligne doit toujours précéder l'appel de la fonction
            // MLV_create_window
            //
            MLV_execute_at_exit( exit_function, &arret );

            //
            // Créé la fenêtre et l'affiche.
            //
            MLV_create_window( "medium - 5 - exit", "exit", width, height );

            //
            // Tant que l'utilisateur ne demande pas un arret du programme,
            // on actualise l'affichage de l'écran.
            //
            while( ! arret ){
                    affichage( width, height );
            }

            //
            // Affiche un message d'adieu.
            //
            MLV_draw_adapted_text_box(
                    200, 300,
                    "Au revoir et à bientôt!",
                    9,
                    MLV_COLOR_RED, MLV_COLOR_GREEN, MLV_COLOR_BLACK,
                    MLV_TEXT_CENTER
            );
            MLV_actualise_window();  // Met à jour l'affichage

            //
            // Attend 2 secondes
            //
            MLV_wait_seconds( 2 );

            //
            // Ferme la fenêtre
            //
            MLV_free_window();
            return 0;
    }