IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

SDL et API Windows (GetOpenFileName)


Sujet :

C

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Par défaut SDL et API Windows (GetOpenFileName)
    Bonjour,

    Dans un programme où la fenêtre principale (non redimensionnable) est une fenêtre SDL, je fais des appels à la fonction GetOpenFileName (le hwndOwner de la structure OPENFILENAME est celui de cette fenêtre principale).

    Après un ou 2 appels de sélection de fichier et juste après un clic dans la fenêtre principale les boutons "icon" et "quit" (coin supérieur droit) deviennent inactifs !
    Il n'y a plus de surbrillance lorsque la souris passe dessus et il n'est plus possible d'iconifier ni de fermer la fenêtre.
    La situation redevient normale après action (mise en icône puis rétablissement) sur l’icône du programme dans la barre des tâches.

    Je travaille sous Windows 7 Pro, pouvez-vous me donner des pistes sur l'origine et la résolution de ce problème ?

    D'avance merci

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    À mon avis, ca vient plus de la manière d'ouvrir le sélecteur de fichier, de l'afficher, de le masquer, et surtout, de désactiver l'autre fenêtre pendant ce temps.

    Cela dit, ca fait un moment que j'ai plus fait d'interfaces graphiques, et je ne suis pas un spécialiste de SDL.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Par défaut
    ca vient plus de la manière d'ouvrir le sélecteur de fichier, de l'afficher, de le masquer, et surtout, de désactiver l'autre fenêtre pendant ce temps
    Pour faire pour cela j'ai une fonction classique qui déclare la structure OPENFILENAME et appelle GetOpenFileName c'est tout.

    Y a t-il des inits (instance, fenêtre ...) ou des précautions à prévoir lorsque l'on utilise l'API Windows avec un template (issu de Code::Blocks) SDL ?

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    attention... win api permet d'afficher, SDL aussi.

    Il est probable que SDL sur windows fasse appel à des initialisations de la winapi.
    Mais je n'ai jamais fais de SDL pour windows, donc je reste dans le conditionnel.

  5. #5
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 791
    Par défaut
    Hello,

    J'ai déjà utilisé GetOpenFileName() dans un projet sdl, sans problème. Mais pour hwndOwner, je faisais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    OPENFILENAME ofn;
     
    ofn.hwndOwner=GetConsoleWindow();
    Mais quelle version de sdl utilises-tu?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Par défaut
    Hello,

    J'utilise ofn.hwndOwner= GetActiveWindow();

    Je vais essayer avec ofn.hwndOwner=GetConsoleWindow();
    mais quel include faut-il ?
    (si je remplace brutalement j'ai une "undefined reference" )

    La version SDL: 1.2.14

  7. #7
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 791
    Par défaut
    Je n'inclus que windows.h, qui inclut wincon.h, l'include pour GetConsoleWindow()

    Et j'utilise la même version de sdl que toi.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Par défaut
    Pour info avec GetConsoleWindow il me faut déclarer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #if (_WIN32_WINNT < 0x0500) // This switch is needed to make the program compile
    #undef _WIN32_WINNT // because GetConsoleWindow needs it. See Documentation
    #define _WIN32_WINNT 0x0500 // for GetConsoleWindow in MSDN.
    #endif
    #include <windows.h>
    C'est une bonne piste car je n'ai plus le même comportement.
    Je teste ...

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Par défaut
    Bonjour,

    J'ai fait des tas de tests, essayé avec les fonctions de contrôle fenêtres de l'API, désactivé les events SDL ...
    (entre GetActiveWindow et GetConsoleWindow le comportement est juste un peu différent en mode Debug uniquement; même avec NULL en hwndOwner j'ai le problème ! )
    Mais je n'ai pas réussi à corriger

    J'ai essayé sur une autre machine et je n'avais pas le problème mais je l'ai quand même reproduit une fois au cours de mes nombreux tests
    Sur la mienne (HP ProBook série S) c'est systématique !

    Avez-vous une idée d'où cela peut venir ?

  10. #10
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 791
    Par défaut
    Poste ton code, l'erreur ne vient peut-être pas de l'initialisation de hwndOwner...

  11. #11
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Par défaut
    J'ai un programme de test qui reproduit le problème (en tous cas sur ma machine !) :
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL\SDL.h>
    #include <windows.h>
     
    //Variables globales
    static SDL_Surface* ecran = NULL;
    static SDL_Event event;
    static HWND WDH;
     
    char path[MAX_PATH];
    char* chemin = &path[0];
     
    // Prototypes
    int getAudioPath (HWND parentWindow, char* chemin); // Sélection et retour du chemin d'un fichier audio
     
    // Fonction main
    int main ( int argc, char** argv )
    {
        // initialize SDL video
        if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
        {
            printf( "Unable to init SDL: %s\n", SDL_GetError() );
            return 1;
        }
     
        // create a new window
        ecran = SDL_SetVideoMode(1280, 680, 32,SDL_HWSURFACE|SDL_DOUBLEBUF);
        // clear screen
        SDL_FillRect(ecran, 0, SDL_MapRGB(ecran->format, 0, 0, 0)); // fond noir
        WDH = GetActiveWindow();
     
        // program main loop
        int quitter = 0;
        while (quitter== 0)
        {
            // message processing loop
            while (SDL_PollEvent(&event))
            {
                // check for messages
                switch (event.type)
                {
                    // exit if the window is closed
                case SDL_QUIT:
                    quitter = 1;
                    break;
                    // clic
                case SDL_MOUSEBUTTONDOWN:
                    if (event.button.button==SDL_BUTTON_LEFT)  // Clic de souris (gauche)
                    {
     
                        int res = getAudioPath (WDH , chemin);  // Sélection du fichier
                        printf("res %i \n", res);
                        printf(chemin);printf("\n");
     
                    } // fin clic gauche
                    break;
                    if (event.button.button==SDL_BUTTON_RIGHT)  // Clic de souris (droit)
                    {
                        // juste pour tester le problème  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                        // désactive les boutons !
                    } // fin clic droit
                    break;
     
                    // check for keypresses
                case SDL_KEYDOWN:
                    {
                        // exit if ESCAPE is pressed
                        if (event.key.keysym.sym == SDLK_ESCAPE) quitter = 1;
                    }
                } // end switch
     
            } // end of message processing
     
            // DRAWING STARTS HERE
     
            // clear screen
            SDL_FillRect(ecran, 0, SDL_MapRGB(ecran->format, 0, 0, 0));
     
            // finally, update the screen :)
            SDL_Flip(ecran);
     
        } // end main loop
     
        // all is well ;)
        printf("Exited cleanly\n");
        return 0;
    }
     
     
    // Fonctions
     
    int getAudioPath (HWND parentWindow, char* chemin) // Sélection et retour du chemin d'un fichier audio
    {
        //Structure nécessaire à la boîte de dialogue d'ouverture
        OPENFILENAME toGetFileName;
        //Variable qui va recevoir le chemin de la musique
        char filePath[MAX_PATH];
     
        //Remplissage de la structure
        ZeroMemory(&toGetFileName, sizeof(toGetFileName));
        toGetFileName.lStructSize = sizeof(toGetFileName);
        toGetFileName.hwndOwner = parentWindow;
        toGetFileName.hInstance = NULL;
        toGetFileName.lpstrFile = filePath;
        toGetFileName.nMaxFile = MAX_PATH;
        toGetFileName.lpstrInitialDir = "C:\\Users\\Public\\Music";
        //Avec un filtre de fichiers audio
        toGetFileName.lpstrFilter = "Audio File\0*.mp3;*.wav;*.ogg;*.wma\0\0";
        toGetFileName.nFilterIndex = 1;
        toGetFileName.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER;
     
        //Si l'utilisateur clique sur "Ouvrir"
        if(GetOpenFileName(&toGetFileName) == TRUE)
        {
            strcpy(chemin, filePath );
            return 1;
        }
     
        else
        {
            return 0;
        }
     
    }
    Faire clic gauche, sélectionner un fichier
    Faire clic droit => boutons de la fenêtre désactivés !!
    (je peux quitter avec ESCAPE mais pas en fermant la fenêtre, un clic sur ces boutons provoque alors un autre appel à ma fonction de sélection)

  12. #12
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 791
    Par défaut
    Je suis (très) loin d'être un spécialiste de l'api windows, et je ne vois qu'une chose qui pourrait faire que ça foire:

    lpstrFile
    Type: LPTSTR
    The file name used to initialize the File Name edit control. The first character of this buffer must be NULL if initialization is not necessary. When the GetOpenFileName or GetSaveFileName function returns successfully, this buffer contains the drive designator, path, file name, and extension of the selected file.
    Dans ton cas, contenu imprévisible me semble-t-il.

    Sinon je ne vois rien d'autre, ta fonction et la mienne sont très semblables.

  13. #13
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Par défaut
    J'ai rajouté la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    toGetFileName.lpstrFile[0] = '\0';
    après l'affectation avec filePath (ligne 105 dans la fonction)

    Cela ne change rien.

  14. #14
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Bonjour. Peux-tu poster ton projet stp ?

  15. #15
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Par défaut
    Bonjour Melem,

    Peux-tu poster ton projet stp ?
    Non, désolé.

    Mais le programme de test déjà posté est complétement représentatif de mon problème.
    Actuellement j'essaie de remettre "l'activité des boutons" avec les fonctions ShowWindow mais j'ai constaté que c'était inefficace car je n'arrive pas à récupérer le bon HWND lorsque la fenêtre est "inactive" (après un clic droit dans le test).
    Je creuse du côté du "Z-order".

  16. #16
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    Salut
    Citation Envoyé par nanosoft Voir le message
    Y a t-il des inits (instance, fenêtre ...) ou des précautions à prévoir lorsque l'on utilise l'API Windows avec un template (issu de Code::Blocks) SDL ?
    l'architecture d'un programme SDL et un programme Windows avec API c'est 2 choses différentes.
    Dans un programme avec API Windows il y a un WinMain() ,initialisation de la fenêtre et la gestion de la boucle de message avec PeekMessage(),TranslateMessage()..
    tu fais ce que tu veux pour gérer les fenêtres le revers de la médaille c'est que c'est plus lourd pour tout gérer.

    Sous SDL tout cela est masqué évidemment on n'a pas à gérer les API plus bas-niveau.
    Seulement l'inconvénient c'est que tu risques d'être bancal, à porte-à-faux entre SDL et les API Windows

    Voilà pourquoi je déconseille radicalement de mixer les 2


    Citation Envoyé par nanosoft Voir le message
    Actuellement j'essaie de remettre "l'activité des boutons" avec les fonctions ShowWindow mais j'ai constaté que c'était inefficace car je n'arrive pas à récupérer le bon HWND lorsque la fenêtre est "inactive" (après un clic droit dans le test).
    Je creuse du côté du "Z-order".
    si tu appelles une API Windows tu risques d'être bancal avec la logique interne de SDL..
    tu peux obtenir un handle de Windows mais ton HWND risque d'être invalide parce qu'il y a la cuisine interne de SDL à laquelle tu as difficilement accès sauf de cuisiner le code source de SDL.
    C'est ça le gros inconvénient des classes toute-faites censées masquer le "bas-niveau"
    Et puis dans la philosophie SDL tu n'as pas à appeler des API win32 vu que SDL doit être générique et multiplateformes

  17. #17
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      WDH = GetActiveWindow();
    tu obtiens vraisemblablement un mauvais HWND.
    La solution ce serait de faire une énumération de fenêtres et avec l'API FindWindow tu regardes si le HWND de fenêtre que tu obtiens correspond au nom de ton programme.
    Ou pour faire plus simple il faut essayer d'obtenir le HWND en fonction du nom de ton programme ou fenêtre affichée

  18. #18
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par nanosoft Voir le message
    le programme de test déjà posté est complétement représentatif de mon problème
    Où ça ? C'est tout ce que je demande à voir ...

  19. #19
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      WDH = GetActiveWindow();
    tu obtiens vraisemblablement un mauvais HWND.
    La solution ce serait de faire une énumération de fenêtres et avec l'API FindWindow tu regardes si le HWND de fenêtre que tu obtiens correspond au nom de ton programme.
    Ou pour faire plus simple il faut essayer d'obtenir le HWND en fonction du nom de ton programme ou fenêtre affichée
    Il y a mieux : SDL_GetWMInfo.

  20. #20
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Par défaut
    Bonjour à tous,

    si tu appelles une API Windows tu risques d'être bancal avec la logique interne de SDL...
    C'est un peu ce que je craignais, j'ai choisi SDL pour la facilité mais j'aurais voulu bénéficier de la fonction GetOpenFileName qui est sympa sous Windows (visualisation images ...).

    tu obtiens vraisemblablement un mauvais HWND
    Maintenant, avec vos derniers conseils, j'obtiens le bon HWND mais je n'ai pas encore résolu le problème.
    Avec la séquence ci-dessous les boutons sont réactivés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ShowWindow(WDH, SW_MINIMIZE);
    ShowWindow(WDH, SW_RESTORE);
    mais pas avec la ligne 2 seule.

    Et faire clignoter la fenêtre n'est pas une solution qui me convient

    Où ça ? C'est tout ce que je demande à voir ...
    Le code n'apparait pas dans mon 2eme post du 26/08 ? !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 29
    Dernier message: 14/01/2013, 10h40
  2. SDL & API windows
    Par christolb29 dans le forum C
    Réponses: 2
    Dernier message: 24/02/2010, 21h50
  3. tutoriel : La programmation de l'API Windows en C++ par Bob
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 19
    Dernier message: 21/06/2008, 14h34
  4. Réponses: 2
    Dernier message: 18/04/2007, 21h32
  5. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo