Dans cet après midi au temps si merveilleux.... je me suis mis vite fait sur un petit ecran de veille en SDL. Bon j'ai quelques problèmes (mais concernant windows) mais un concernant la SDL.

Déjà, voici le code. Affichage plein écran, des points de toutes les couleurs qui s'affichent, c'est tout.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
 
SDL_Surface *ecran = NULL;
 
void initialisationSDL(void)
{
    if (SDL_Init(SDL_INIT_VIDEO)== -1) /* Démarrage de la SDL. Si erreur alors... */
    {
        fprintf(stderr, "Erreur d'initialisation de la SDL : %s\n", SDL_GetError()); /* Ecriture de l'erreur */
        exit(EXIT_FAILURE); /* On quitte le programme */
    }
    if( (ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN)) == NULL)
    {
 
        fprintf(stderr, "Impossible d'activer le mode graphique : %s\n", SDL_GetError());
        exit(EXIT_FAILURE);
    }
 
}
 
 
void dessineEtoile(void)
{
    int R = (int)((double)rand() / ((double)RAND_MAX + 1) * 255);
    int G = (int)((double)rand() / ((double)RAND_MAX + 1) * 255);
    int B = (int)((double)rand() / ((double)RAND_MAX + 1) * 255);
    Uint32 coul = SDL_MapRGB(ecran->format, R, G, B);
    int X = (int)((double)rand() / ((double)RAND_MAX + 1) * 640);
    int Y = (int)((double)rand() / ((double)RAND_MAX + 1) * 480);
 
  *((Uint32*)(ecran->pixels) + X + Y * ecran->w) = coul;
}
 
 
void ecranVeille(void)
{
    int continuer = 1;
    while(continuer)
    {
 
        dessineEtoile();
        SDL_Flip(ecran);
        SDL_Event event;
 
        SDL_PollEvent(&event);
        switch(event.type)
        {
           /* case SDL_MOUSEMOTION: */
            case SDL_KEYDOWN:
            case SDL_MOUSEBUTTONDOWN:
            case SDL_QUIT:
                continuer = 0;
                break;
 
            default:
                break;
 
        }
    }
}
 
int main (int argc, char *argv[]) /* Je ne me souviens plus, la SDL autorise-t-elle le int main (void)? */
{
 
    initialisationSDL();
    SDL_ShowCursor(SDL_DISABLE);
    ecranVeille();
    SDL_ShowCursor(SDL_ENABLE); /* Est-ce utile ? */
    SDL_Quit();
    return(EXIT_SUCCESS);
}
Le problème c'est que si je met SDL_MOUSEMOTION dans le switch, l'appli se lance et s'arrête de suite. Ce qui est dommage car j'aimerai arrêter l'appli avec le déplacement de la souris. Y'a t'il un moyen de faire ce que je veux, même avec un petit bidouillage ?
J'ai déjà mis un SDL_Delay() avant ecranVeill(), mais sans resultat.

Merci.

(Sinon pour les problèmes windows au cas où, c'est quand je fais propriété affichage->Ecran de veille, chaque fois l'écran de veille se lance, y'a un moyen de gérer ça ?)