Programmer en C++
SDL2 - Ma première fenêtre

1. Configurer un nouveau projet

Dans tout ce qui suivra la méthode utilisée sera toujours la même :
1) Lancez CodeBlocks. Dans la fenêtre qui s'ouvre, cliquez sur "Create a new project" :

2) Choisir "Empty project". Cliquez Next dans la fenêtre suivante. C'est juste une information.

3) Donner un nom à votre projet dans le champ "Project title". J'ai choisi ici "SDLprojet1".

4) Dans la fenêtre suivante, ne touchez à rien. Cliquez juste sur le bouton "Finish".

5) Attention à ne pas oublier ce qui va suivre à chaque construction d'un nouveau projet. Il m'est arrivé accidentellement d'omettre cette étape et de ne plus comprendre pourquoi les projets précédents fonctionnaient, et pas les suivants !
Faites un clic droit sur le nom de votre projet pour ouvrir un menu contextuel dans lequel vous choisirez "Build options...".

6) Dans la fenêtre qui s'ouvre, cliquez sur le nom de votre projet afin que les modifications affectent simultanément "Debug" et "Release". Sélectionnez l'onglet "Linker settings". Le bouton "add" en bas de la fenêtre permet l'ouverture d'une boite de dialogue contenant un champ de saisie "File:". Entrez successivement et dans cet ordre :
libmingw32, libSDL2main, et libSDL2.

Voilà c'est terminé pour la configuration des fichiers nécessaires au bon fonctionnement de notre projet. Passons maintenant au plus intéressant, la programmation.

2. Du code pour une première fenêtre

Cliquez dans la barre de menu sur File, New, et Empty file, afin d'ouvrir une page vierge dans laquelle nous écrirons notre premier code.

répondez "Oui" à la demande d'inclure ce nouveau fichier dans le projet.

Donnez ensuite le nom "main.cpp" à ce fichier pour l'enregistrer.

Dans la fenêtre qui s'ouvre aussitôt, laissez les cases "Debug" et "Release" cochées et cliquez sur OK.
C'est parti on peut enfin commencer à écrire.

#include <iostream>
#include <SDL.h>

using namespace std;

int main(int argc, char* argv[])
{
    cout << "Une application SDL" << endl;
    return EXIT_SUCCESS;
}

Notez bien que c'est SDL.h et non SDL2.h qu'il faut écrire ici. Il n'y a rien d'autre à ajouter.
Ce programme ne fait rien de particulier. Il ouvre juste une fenêtre comme celle que nous avions jusqu'à présent en programmant en C++. Toutefois il permet de tester la bonne configuration de CodeBlocks puisqu'il va chercher à ouvrir le fichier d'en-tête "SDL.h". Si tout fonctionne, c'est que vous avez bien travaillé.

Passons maintenant aux choses sérieuses avec l'ouverture d'une fenêtre graphique.
La première étape consiste à créer un pointeur qui servira à manipuler la future fenêtre. Pour l'instant nous laissons la valeur de ce pointeur à zéro.

SDL_Window *pFenetre = 0;

Ensuite il est obligatoire d'initialiser la SDL, ce qui se fait avec l'instruction :

SDL_Init(SDL_INIT_VIDEO);

L'argument qui est transmis, permet d'initialiser à la fois, ce qui concerne l'affichage graphique, mais aussi la détection des événements (clavier, souris, ...). Il existe d'autres codes que nous verrons plus tard.
Sachez que le fait d'initialiser SDL vous oblige à la fin du programme, à libérer la mémoire en utilisant l'instruction :

SDL_Quit();

C'est ici que nous créons la fenêtre, et que le pointeur de cette fenêtre est initialisé.

pFenetre = SDL_CreateWindow(
        "Fenetre avec SDL", SDL_WINDOWPOS_CENTERED,
        SDL_WINDOWPOS_CENTERED, 600,
        400, SDL_WINDOW_SHOWN);

Les arguments correspondent à une fenêtre qui sera centrée verticalement et horizontalement, qui fera 600 pixels de large, 400 pixels de haut. Le dernier argument précise que cette fenêtre sera visible. Si nous lançons maintenant le programme, la fenêtre se crée, s'ouvre et se referme aussitôt. Pour éviter de trop compliquer le programme pour l'instant, nous allons juste incorporer une temporisation de quelques secondes afin de pouvoir admirer notre oeuvre.
Cette temporisation est réalisée par la commande :

SDL_Delay (4000);

Le temps est exprimé ici en millisecondes. La fenêtre existera donc pendant 4 secondes.

Pour quitter proprement le programme, il nous faut détruire le pointeur de notre fenêtre. C'est le rôle de l'instruction ci-dessous qui doit être placée avant SDL_Quit().

SDL_DestroyWindow(pFenetre);

3. Le code complet de notre premier projet

#include <iostream>
#include <SDL.h>

using namespace std;

int main(int argc, char* argv[])
{
    cout << "Une application SDL" << endl;

    SDL_Window *pFenetre;
    SDL_Init (SDL_INIT_VIDEO);
    pFenetre = SDL_CreateWindow(
            "Fenetre avec SDL", SDL_WINDOWPOS_CENTERED,
            SDL_WINDOWPOS_CENTERED, 600,
            400, SDL_WINDOW_SHOWN);

    SDL_Delay (4000);

    SDL_DestroyWindow(pFenetre);
    SDL_Quit ();

    return EXIT_SUCCESS;
}