Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C > Mon lecteur audio > Lecture du sujet

Mon lecteur audio

critiques/commentaires/suggestions attendues

Vous devez être inscrit pour pouvoir poster des messages

Page : 1  2  Suivante
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1  2  Suivante
Hors ligne aska990 # Posté le 25/07/2008 à 02:30:28
Je vais manger moult frites !
Avatar
Groupe : Membres
Bonjour bonjour

Je viens de coder un lecteur audio en C, et j'aimerais savoir ce que vous en pensez.
Ce n'est rien d'extraordinaire, je l'ai fait juste pour m'entraîner, mais si voyez des moyens de l'améliorer, n'hésitez pas. ;)

EDIT : Petites améliorations : on peut maintenant ouvrir une musique soit en la glissant sur l'éxécutable, soit en faisant clic droit dessus>ouvrir avec et en sélectionnant le programme, soit, pour les utilisateurs de windows uniquement, l'ouvrir en cliquant sur le bouton ouvrir en haut à droite dans le programme. Autre amélioration : le programme ne se ferme plus de suite si aucune musique n'est chargée.

Re-screenshot :

Image utilisateur

Et le lien de téléchargement :
télécharger le .zip ici
Édité le 10/08/2008 à 10:09:05 par aska990
 
Hors ligne Emoragie # Posté le 25/07/2008 à 02:42:46
Bad is Good.
Avatar
Groupe : Membres
Pas pratique, pas super beau. Mais il marche plutôt bien ^^

Suggestions :

- Le rendre plus pratique, là c'est dur d'écouter sa musique x)

-Graphiquement c'est pas le top, il faudrait revoir ça. (On peu en parler par MP si tu veux =X)

Avatar Noelisé par jolo2.

En essayant continuellement, on finit par réussir. Donc plus ça rate, plus on a de chances que ça marche. ;)
(\__/)
(o' -'o) - Pikachu ! Pika pika !
('')o('')
 
Hors ligne aska990 # Posté le 25/07/2008 à 02:56:14
Je vais manger moult frites !
Avatar
Groupe : Membres
Le problème c'est que je n'ai pas trouvé d'autre moyen pour sélectionner la musique à ouvrir. J'avais essayé avec les arguments de main et ça n'avait pas fonctionné pour une raison mystérieuse. :euh:

Pour le graphisme, j'essaierai d'améliorer pour la prochaine version ^^

Et sinon, au niveau du code, c'est pas trop écoeurant ? :-°
Édité le 25/07/2008 à 03:10:06 par aska990
 
Hors ligne aska990 # Posté le 26/07/2008 à 03:10:06
Je vais manger moult frites !
Avatar
Groupe : Membres
UP...
 
Hors ligne GuilOooo # Posté le 26/07/2008 à 14:34:38
PriPrOTtTt§!!!§
Avatar
Groupe : Membres
Je teste et j'édite au fur et à mesure de ce que je trouve. Je ne prétends pas être exhaustif, hein.

Pour le packaging, je ne vois pas bien l'intérêt de mettre les headers dans un sous-dossier à part. À la limite, si c'était une bibliothèque ou quoi, tu aurais pu mettre les interfaces publiques dans le dossier sources et la partie privée dans un sous-dossier. Mais ici ?

Ensuite, tu utilises FMod. FMod est certainement une excellente bibliothèque et tout ce qu'on voudra, mais elle se destine à des projets commerciaux (y'a qu'à voir son prix : de l'ordre 100$ pour une licence « hobbyist programmer »). Pour ton lecteur, les problèmes de licence peuvent se montrer restrictifs (si tu comptes distribuer ton programme vraiment après)

main.c

Premier constat : la fonction main est assez conséquente (genre 160 à 170 lignes). Il n'y a pas moyen de la subdiviser un peu ? On y verrait plus clair. Les fonctions statiques sont tes amies.

De plus, sur 170 lignes de code, je n'ai vu qu'une seule ligne de commentaire ! Je t'accorde que les noms sont bien choisis, ce qui rend le tout relativement aisé à lire, mais un commentaire de temps en temps ne ferait pas de mal.

Enfin, j'ai vu un printf à un moment. Le printf, c'est moyennement bien dans un programme censé être entièrement graphique : y'a peu de chances que l'utilisateur le voie...

affichage.c/.h

Tous ces #define dans le header, je suis sûr qu'on peut en faire quelque chose. Pourquoi ne pas tenter un item-list, voire même lire ces valeurs dans un fichier dynamiquement ? Ce serait vraiment bien, et ça faciliterait énormément la création de thèmes graphiques pour ton lecteur.

La fonction afficher prend une dizaine d'arguments. Je suis sûr qu'il est possible de les regrouper dans deux grandes structures : etatFenetre (surfaces + compteurs de temps pour les FPS + position du curseur + surface écran, et ainsi de suite) et etatLecteur (tout ce qui concerne le lecteur, comme le volume et tout). Ça pourrait servir à réorganiser tout le programme en deux modules bien séparés étanchement.

Sinon, vu que tu as une énorme collection de surfaces, pourquoi ne pas faire une structure genre ElementGraphique qui contient une surface et un SDL_Rect (ou deux entiers x,y) ? Ce serait bien pratique. Ensuite, tu pourrais faire un système avec un tableau d'ElementGraphique's et une énumération :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
enum
{
  FOND_VISUALISATION,
  FOND_LECTEUR,
  TITRE,
  ...,

  NB_TOTAL_ELEMENTS
};

ElementGraphique fenetre[NB_TOTAL_ELEMENTS];


Puis, fenetre[TITRE] designe l'ElementGraphique du titre, et ainsi de suite.

L'avantage ? Tu peux tout blitter d'un seul coup avec un simple for, et ça doit factoriser un peu de code.

gestionsurfaces.h/.c

Là, puisque tu as fait une fonction pour charger les surfaces, saches qu'il y a un petit truc qui permet d'accélérer le blitt des surfaces, au prix de passer la surface écran en paramètre à la fonction qui charge les images (en plus des autres). Voici :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
void chargerImageOptimisee(SDL_Surface** image, const char* chemin, SDL_Surface* ecran)
{
    /* On charge l'image dans une surface temporaire. */
    SDL_Surface* temp = IMG_Load(chemin);
    if(temp == NULL)
    {
        *image = NULL;
        return;
    }

    /* Puis on fait une conversion sur la surface temporaire, de maniere a ce qu'elle ait le meme
       format que la surface ecran. Puis on libere la surf temporaire, devenue inutile. */
    *image = SDL_ConvertSurface(temp, ecran->format, SDL_HWSURFACE);
    SDL_FreeSurface(*temp);
}

}


Autres fichiers

Peu de code, ou code trivial. Donc pas grand chose à dire, je n'ai pas regardé en détails.

globalement

C'est bien joué, tu as des identificateurs clairs, des pratiques propres. Je pense que tu pourrais exporter plus de données du code vers un fichier externe (par exemple). Aussi, tu devrais pouvoir subdiviser ton code en modules étanches et fonctionnels, en repensant l'organisation des structures par exemple. Ça ne veut pas dire que ton code n'est pas organisé ! Mais ça rendrait l'extension de ton code plus facile par la suite. Enfin, bien que le code se comprenne avec les identificateurs clairs, les commentaires c'est cool aussi. J'en ai pas vu beaucoup.

Je précise que ce n'est qu'une analyse rapide, j'ai rien regardé en profondeur (j'ai même pas pris la peine de faire un makefile pour compiler, c'est vous dire). Mais, de loin, ça à l'air tout à fait correct.
Édité le 26/07/2008 à 14:56:55 par GuilOooo

Ma série d'articles « Paradigmes » : Intro - Impératif
OpenCola, la seule boisson open-source au monde !
 
Hors ligne aska990 # Posté le 27/07/2008 à 00:54:50
Je vais manger moult frites !
Avatar
Groupe : Membres
Merci GuilOooo, ça va m'aider tout ça.

Citation : GuilOooo
je ne vois pas bien l'intérêt de mettre les headers dans un sous-dossier à part

Bah je voulais pas tout mettre dans le même dossier....

Citation : GuilOooo
Pour ton lecteur, les problèmes de licence peuvent se montrer restrictifs (si tu comptes distribuer ton programme vraiment après)

Oh non, je ne compte pas le distribuer, je l'ai fait uniquement pour m'entraîner. De toutes façon, personne en voudrait, VLC ou iTunes sont gratuits et 100 fois mieux.

Citation : Pas de titre
Pourquoi ne pas tenter un item-list, voire même lire ces valeurs dans un fichier dynamiquement ?

Qu'est-ce qu'un item-list et un fichier lu dynamiquement ?


Bon, ça va me donner pas mal de choses à améliorer pour la version suivante. Merci beaucoup ! :)


 
Hors ligne GuilOooo # Posté le 27/07/2008 à 11:32:34
PriPrOTtTt§!!!§
Avatar
Groupe : Membres
Citation : aska990

Qu'est-ce qu'un item-list et un fichier lu dynamiquement ?


Le plus simple, c'est le fichier lu dynamiquement. C'est tout bêtement un fichier, par exemple un fichier texte, que ton programme ouvre et lit pour y piocher des informations (dynamiquement signifie : « au moment de l'exécution ». Donc c'est un fichier lu par le programme au moment de l'éxécution).

Pour les item-list, c'est une technique un poil plus compliquée à expliquer là, maintenant, qui permet de stocker certaines informations dans un fichier à part. La différence avec l'autre, c'est que les données sont mises dans ton éxécutable au moment de la compilation, et il faut donc recompiler quand tu veux changer tes données. Je te laisse faire des recherches (me semble que le site d'-ed- en parle).

Ma série d'articles « Paradigmes » : Intro - Impératif
OpenCola, la seule boisson open-source au monde !
 
Hors ligne aska990 # Posté le 30/07/2008 à 08:19:32
Je vais manger moult frites !
Avatar
Groupe : Membres
Hors ligne Lewis123 # Posté le 30/07/2008 à 08:43:22
Avatar
Groupe : Membres
Dommage que je n'ai aucun mp3 sur mon pc ^^

Conseil: Met une ou quelques musiques dans un repertoire ^^

Keyboard not found, press any key to continue...

 
Hors ligne moustick1991 # Posté le 30/07/2008 à 20:56:57
Avatar
Groupe : Membres
Bonjour , je t'ais laissé un MP pour te conseiller un mode d'ouverture de fichier , en utilisant l'API windows (si tu estsous windows bien sur ... :) )

bonne chance ;) .
Hors ligne Vhann # Posté le 30/07/2008 à 21:35:52
VIM Has Anything u Need, Nerd
Avatar
Groupe : Membres
Quelques critiques:
1- Les accents dans les noms de dossier c'est pas très gentil, j'ai dû passer par mon explorateur graphique pour pouvoir y accéder/renommer le dossier éxécutable (j'imagine que c'est comme ça que ça s'appelait).

Pourquoi c'est mal? Parce que l'encodage de ces caractères diffère d'un système à l'autre (Windows/Linux)

2- Pour passer des fichiers par la ligne de commande (paramètres du main()), il suffit d'échapper le chemin du fichier ( "chemin/vers/musique" ).

Sinon, tu peux te renseigner sur dirent.h (POSIX): opendir(), readdir(), closedir(), etc. pour permettre aux utilisateurs de choisir leur fichiers audio.

3- Je ne possède pas la FMOD (d'où certaines erreurs), mais quand même:
Code : Console
vhann@vhanndinateurK:~/Desktop/Zmusic Player/sources$ gcc -Wall -Wextra -ansi -pedantic *.c
affichage.c: In function ‘afficher’:
affichage.c:10: warning: missing initializer
affichage.c:10: warning: (near initialization for ‘position.y’)
affichage.c: In function ‘blitterSymboles’:
affichage.c:75: warning: missing initializer
affichage.c:75: warning: (near initialization for ‘position.y’)
affichage.c: In function ‘blitterEtatBouton’:
affichage.c:85: warning: missing initializer
affichage.c:85: warning: (near initialization for ‘position.y’)
affichage.c: In function ‘afficherVolume’:
affichage.c:106: warning: missing initializer
affichage.c:106: warning: (near initialization for ‘couleur.unused’)
affichage.c:107: warning: missing initializer
affichage.c:107: warning: (near initialization for ‘position.y’)
affichage.c: In function ‘afficherTemps’:
affichage.c:123: warning: missing initializer
affichage.c:123: warning: (near initialization for ‘couleur.unused’)
affichage.c:124: warning: missing initializer
affichage.c:124: warning: (near initialization for ‘position.y’)
affichage.c: In function ‘afficherNom’:
affichage.c:140: warning: missing initializer
affichage.c:140: warning: (near initialization for ‘couleur.unused’)
affichage.c:141: warning: missing initializer
affichage.c:141: warning: (near initialization for ‘position.y’)
affichage.c: In function ‘afficherErreur’:
affichage.c:156: warning: missing initializer
affichage.c:156: warning: (near initialization for ‘couleur.unused’)
affichage.c:157: warning: missing initializer
affichage.c:157: warning: (near initialization for ‘position.y’)
main.c:5:23: error: FMOD/fmod.h: No such file or directory
In file included from main.c:9:
headers/son.h:4: error: expected ‘)’ before ‘*’ token
main.c: In function ‘main’:
main.c:19: warning: ISO C90 forbids mixed declarations and code
main.c:22: warning: missing initializer
main.c:22: warning: (near initialization for ‘etatDesBoutons.pause’)
main.c:23: warning: missing braces around initializer
main.c:23: warning: (near initialization for ‘surfaces.boutons’)
main.c:23: warning: missing initializer
main.c:23: warning: (near initialization for ‘surfaces.boutons.pause’)
main.c:23: warning: missing initializer
main.c:23: warning: (near initialization for ‘surfaces.bannieres’)
main.c:24: error: ‘FSOUND_STREAM’ undeclared (first use in this function)
main.c:24: error: (Each undeclared identifier is reported only once
main.c:24: error: for each function it appears in.)
main.c:24: error: ‘son’ undeclared (first use in this function)
main.c:24: error: expected expression before ‘{’ token
main.c:25: warning: missing initializer
main.c:25: warning: (near initialization for ‘positionCurseur.y’)
main.c:25: warning: ISO C90 forbids mixed declarations and code
main.c:31: warning: implicit declaration of function ‘FSOUND_Init’
main.c:32: warning: implicit declaration of function ‘FSOUND_DSP_SetActive’
main.c:32: warning: implicit declaration of function ‘FSOUND_DSP_GetFFTUnit’
main.c:36: warning: implicit declaration of function ‘chargerSon’
main.c:46: warning: implicit declaration of function ‘FSOUND_Stream_SetLoopCount’
main.c:64: warning: implicit declaration of function ‘FSOUND_GetPaused’
main.c:66: warning: implicit declaration of function ‘FSOUND_Stream_Play’
main.c:66: error: ‘FSOUND_FREE’ undeclared (first use in this function)
main.c:71: warning: implicit declaration of function ‘FSOUND_SetPaused’
main.c:71: error: ‘FSOUND_ALL’ undeclared (first use in this function)
main.c:87: warning: implicit declaration of function ‘FSOUND_Stream_Stop’
main.c:130: warning: implicit declaration of function ‘FSOUND_Stream_SetTime’
main.c:130: warning: implicit declaration of function ‘FSOUND_Stream_GetTime’
main.c:144: warning: implicit declaration of function ‘FSOUND_Stream_GetLengthMs’
main.c:151: warning: implicit declaration of function ‘FSOUND_SetVolume’
main.c:160: warning: implicit declaration of function ‘FSOUND_DSP_GetSpectrum’
main.c:160: warning: passing argument 3 of ‘visualisation’ makes pointer from integer without a cast
main.c:170: warning: implicit declaration of function ‘FSOUND_Stream_Close’
main.c:176: warning: implicit declaration of function ‘FSOUND_Close’
son.c:4:23: error: FMOD/fmod.h: No such file or directory
In file included from son.c:6:
headers/son.h:4: error: expected ‘)’ before ‘*’ token
son.c:8: error: expected ‘)’ before ‘*’ token
visualisation.c:2:23: error: FMOD/fmod.h: No such file or directory
visualisation.c: In function ‘visualisation’:
visualisation.c:10: warning: ISO C90 forbids mixed declarations and code


Cordialement,
Vhann

"root@darkstar:~# fortune
There once was an old man from Esser,
Who's knowledge grew lesser and lesser.
It at last grew so small, [He knew nothing at all,
And now he's a College Professor" :lol:
Saisir du texte avec SDL facilement? C'est ici (SDL_Input)
Vous voulez rire?
-Nous jurons sur l'honneur qu'Internet Explorer n'est PAS basé sur Mozilla Firefox
Quelques URLs amusantes pour Firefox users:
-<lien url="chrome://browser/content/browser.xul">chrome://browser/content/browser.xul</lien>
-<lien url="about:robots">about:robots</lien>
Amusez-vous :D
 
Hors ligne aska990 # Posté le 31/07/2008 à 12:13:19
Je vais manger moult frites !
Avatar
Groupe : Membres
Ce sont des warnings que tout le monde s'accorde à trouver excessifs. (Cf ce topic)
Désolé pour les accents, je n'y avais pas pensé.

Citation : Vhann
2- Pour passer des fichiers par la ligne de commande (paramètres du main()), il suffit d'échapper le chemin du fichier ( "chemin/vers/musique" ).

Que veux-tu dire par "échapper" ?
 
Hors ligne Vhann # Posté le 31/07/2008 à 17:49:51
VIM Has Anything u Need, Nerd
Avatar
Groupe : Membres
Citation : aska990
Ce sont des warnings que tout le monde s'accorde à trouver excessifs. (Cf ce topic)
Désolé pour les accents, je n'y avais pas pensé.

Excessifs peut-être, mais personnellement, je préfère voir le moins d'avertissements possibles, quitte à devoir rajouter { 0, 0, 0, 0 } lorsque je déclare une structure.

"Que veux-tu dire par "échapper" ?" Les entourer par des guillemets. C'est-à-dire que plutôt que de faire: Code : Console
programme ceci est un parametre


Ce qui te donnerait argc == 5, tu fais ceci:
Code : Console
programme "ceci est un parametre"

Ce qui est la façon universelle de faire:

"programme ceci\ est\ un\ parametre" sous Linux
ou quelque chose comme "programme ceci%20est%20un%20parametre" sous Windows

Cordialement,
Vhann

"root@darkstar:~# fortune
There once was an old man from Esser,
Who's knowledge grew lesser and lesser.
It at last grew so small, [He knew nothing at all,
And now he's a College Professor" :lol:
Saisir du texte avec SDL facilement? C'est ici (SDL_Input)
Vous voulez rire?
-Nous jurons sur l'honneur qu'Internet Explorer n'est PAS basé sur Mozilla Firefox
Quelques URLs amusantes pour Firefox users:
-<lien url="chrome://browser/content/browser.xul">chrome://browser/content/browser.xul</lien>
-<lien url="about:robots">about:robots</lien>
Amusez-vous :D
 
Hors ligne aska990 # Posté le 01/08/2008 à 08:17:01
Je vais manger moult frites !
Avatar
Groupe : Membres
Merci moustick1991, ta solution fonctionne très bien. Dommage qu'elle ne fonctionne que sous windows !
Bon, alors quels sont les defines permettant de savoir si on est sous windows, linux ou Macintosh ? Comme ça je pourrai dire à mon programme si il doit chercher ou pas l'adresse dans le fichier.
Bon maintenant il faut que je trouve comment faire sur les OS autres que Windows...


EDIT : ça y est, je sais utiliser les arguments de main ! Et pour les defines, c'est bon j'ai trouvé. ^^
Avec tout ça, il ne dvrait plus y avoir de problème pour ouvrir une musique. :)
Édité le 01/08/2008 à 13:06:01 par aska990
 
Hors ligne Vhann # Posté le 01/08/2008 à 15:34:23
VIM Has Anything u Need, Nerd
Avatar
Groupe : Membres
@aska990: Pour les define c'est ici (je ne sais pas si tu avais déjà trouvé, mais bon, ça peut être utile à d'autres): http://predef.sourceforge.net/preos.html

Cordialement,
Vhann

"root@darkstar:~# fortune
There once was an old man from Esser,
Who's knowledge grew lesser and lesser.
It at last grew so small, [He knew nothing at all,
And now he's a College Professor" :lol:
Saisir du texte avec SDL facilement? C'est ici (SDL_Input)
Vous voulez rire?
-Nous jurons sur l'honneur qu'Internet Explorer n'est PAS basé sur Mozilla Firefox
Quelques URLs amusantes pour Firefox users:
-<lien url="chrome://browser/content/browser.xul">chrome://browser/content/browser.xul</lien>
-<lien url="about:robots">about:robots</lien>
Amusez-vous :D
 
Hors ligne moustick1991 # Posté le 01/08/2008 à 15:54:46
Avatar
Groupe : Membres
Sinon , encore pour windows , je t'ais envoyé un autre MP pour te dire comment inclure le drag & drop(glisser/déplacer) dans une fenêtre SDL. ;)
Hors ligne moi281184 # Posté le 01/08/2008 à 15:59:00
Groupe : Membres
Lol, pourquoi tu lui files par mp ?

T'imagines celui qui cherche la même chose, qui tape sur google, qui tombe sur ce sujet puis qui est super content de savoir que la solution a été envoyé à quelqu'un par mp, lol ?

Image utilisateur
Image utilisateur
Image utilisateur
 
Hors ligne moustick1991 # Posté le 01/08/2008 à 17:02:16
Avatar
Groupe : Membres
Désolé , c'est vrais , moi281184 tu as raison ...
Je prend une douche je vais au tabac et je vous explique tout ca :) ;) .....


EDIT : Voiiiilllàààà :

Alors :

1 : Il faut permettre à la fenêtre de recevoir le message WM_DROPFILES (cf : API WINDOWS et MSDN) et activer les messages système de la SDL (il vous faudra inclure windows.h et SDL_syswm.h ).

Pour cela , je propose une fonction que j'ai fait :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
void Enable_All(void)
{
     
     SDL_SysWMinfo  wminfo; // wminfo est une structure qui va nous permettre de récupérer le handle de la fenêtre SDL 

     SDL_GetWMInfo(&wminfo); // fonction de récupération d'information système dont le handle
 
     HWND hwnd = wminfo.window; //stoquage du handle dans hwnd

    DragAcceptFiles(hwnd,TRUE); // fonction de l'API WINDOWS permmetant à la fenêtre de recevoir le message WM_DROPFILES 

    SDL_EventState (SDL_SYSWMEVENT,SDL_ENABLE ); // fonction de la SDL permettant à la fenêtre de recevoir les messages passés à la fenêtre (comme WM_DROPFILES)
  
     
     }


note : cette fonction est à mettre avant la boucle principale du programme .



2 : Il faut interpréter le message WM_DROPFILES comme ceci :


Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
char ch_son[MAX_PATH] = "" , pl_list[10000][MAX_PATH] = "" ; 

//boucle principale

switch (event.type)
           {
                   case SDL_SYSWMEVENT: //le cas ou le système envoie un message à la fenêtre 
                   
                   
                   if(event.syswm.msg->msg  == WM_DROPFILES) // le cas où il y aurait Drag & Drop (gliser\déposé) .   
                   {
                       GlisserDeposer(ch_son,pl_list  , event.syswm.msg->wParam ); //fonction glissé\déposé  
                      
                       }
                       break; 
}


note : ch_son contient le chemin du fichier glissé . Dans le cas où il y auraient plusieurs fichiers glissés\déposés en même temps,le tableau de chaines pl_list contient tous les chemins des fichiers en question . (cf : tuto sur l'API WINDOWS de Mg++ ).

3 : enfin , je vous donne la fonction GlisserDeposer réalisée par Mg++ :


Code : C
 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
void GlisserDeposer(char chemin[MAX_PATH],char playlist[][MAX_PATH] , WPARAM wParam ) 
{
    
    
    
    
     HDROP hdrop;  
     int nbfichier = 0 , i = 0 , names = 0;
     TCHAR glisse[MAX_PATH] = "";
               
      hdrop =(HDROP)wParam;    
      
      
    
             
    if((nbfichier = DragQueryFile(hdrop,(UINT)-1,(LPTSTR) NULL ,(UINT) 0)) > 0)
            {
              
               
               
               
             ZeroMemory(glisse, _MAX_PATH);  
             
             
            while (i!=nbfichier)  
            {
            
            DragQueryFile(hdrop,names ,(LPTSTR) glisse ,(UINT) MAX_PATH);
            
            
            strcpy (playlist[i],glisse);
            
            
            
            
           
            if(i == 0)
            {
            strcpy (chemin,glisse);
            }
            
            
            i++;
            names ++; 
            
             
            
            
            }


Voilàààààà , si vous avec des questions ou des remarques n'hésitez pas (par MP ou non ) . Si il y a des erreurs , merci de me le faire remarquer gentillement(l'erreur est humaine). :p :lol:


Bonne chance à tous ;) .
Édité le 01/08/2008 à 18:08:22 par moustick1991
Hors ligne aska990 # Posté le 02/08/2008 à 10:03:07
Je vais manger moult frites !
Avatar
Groupe : Membres
Bon, j'aurais une petite question :

Ces defines permettent de savoir sur quel OS on est, mais à la compilation ou alors lors de l'éxécution du programme ?


Autre chose : que veux tu dire par "glisser-déplacer" ?


Et enfin, je reviens un peu dessus :
Citation : GuilOooo
Tous ces #define dans le header, je suis sûr qu'on peut en faire quelque chose. Pourquoi ne pas tenter un item-list, voire même lire ces valeurs dans un fichier dynamiquement ?

J'avoue ne pas trop comprendre l'intérêt...les defines sont faites pour ça, non ? C'est un mal d'en avoir autant ?
De plus, je peux calculer grâce à ça la place d'un élément par rapport à un autre, genre

Code : C
1
2
3
4
5
#define X_BOUTON1 15
#define Y_BOUTON1 30

#define X_BOUTON2 X_BOUTON1 + bouton1->w + 5
#define Y_BOUTON2 Y_BOUTON1


Ainsi, les deux boutons seront toujours alignés horizontalement et espacés de 5 pixels.



 
Connecté gouttegd # Posté le 02/08/2008 à 12:31:54
Avatar
Groupe : Membres
Citation : aska990
Ces defines permettent de savoir sur quel OS on est, mais à la compilation ou alors lors de l'éxécution du programme ?

Ben à la compilation, forcément.

Lors de l'exécution, la question ne se pose plus. Dès lors que le programme s'exécute, c'est qu'il est sur le système pour lequel il a été compilé.

Rappelons à toutes fins utiles que si le code source d'un programme en C est portable (ou du moins peut l'être si le programmeur a fait attention), l'exécutable généré lui ne l'est pas.

« Je vous aiderai si vous me promettez d'aider quelqu'un d'autre en retour. » --- Anonyme
« Soyez vigilant lorsque vous vous exprimez dans un forum électronique. Vos fautes de frappes et de syntaxe vous poursuivront pour l'éternité. » --- Linus B. Torvalds

http://fr.hypo-theses.com/
 
Hors ligne moustick1991 # Posté le 02/08/2008 à 14:43:05
Avatar
Groupe : Membres
Image utilisateur

Le drag & drop c'est le fait de selectionner des fichiers (içi des films) et de les déplacer sur la fenêtre d'une application (içi windows media player)...

;)
Édité le 02/08/2008 à 14:44:12 par moustick1991
Hors ligne aska990 # Posté le 09/08/2008 à 12:02:30
Je vais manger moult frites !
Avatar
Groupe : Membres
Ok, je l'adapterai à mon code quand j'aurai le temps.
 
Hors ligne diaruga # Posté le 09/08/2008 à 13:07:21
L'univers et dans le main !
Avatar
Groupe : Membres
1er idée d'amélioration qui non rien avoir avec le code source (j'irai le voire plus tard ;) ).

Tu pourrai pas faire que l'on puisse mettre plus sieur musiques car une par une en passent par les paramètres c'est vraiment lourd ^^, par exemple l'utilisateur mais tous les chemins de c'est musiques dans le fichier paramètre il te m'encrer qu'à rajouter des boutons pour passer à la musique suivante et inverse ;) .

Et aussi quand on clic sur le bouton pour faire passer la musique en boucle il faudrait mettre un symbole à coté du temps pour dire que c'est en mode boucle sinon on le voit pas trop bien ;) .

Et je pense te faire un meilleur skin enfin si tu veux ! ^^

ps: Tu pourrai pas faire un installateur pour Windows ça fait plus pro ^^ .
Et aussi ton code source pourrai être un peut plus commenter c'est une bonne habitude à prendre ;) .
Édité le 09/08/2008 à 13:12:31 par diaruga
Hors ligne aska990 # Posté le 10/08/2008 à 09:47:21
Je vais manger moult frites !
Avatar
Groupe : Membres
Bon attendez, avant de corriger tout ça, je vais poster la version améliorée avec l'ouverture par l'association de fichiers et, pour les utilisateurs de windows, une fenêtre d'ouverture.

EDIT : Ok, ça y est, le lecteur est un peu amélioré. Il me reste encore à adapter le glisser-déposé, à améliorer également le code et le graphisme, plus quelques autres idées piochées dans ce topic à adapter...bref du pain sur la planche. ^^

(de toutes façon, il y aura toujours quelque chose à améliorer, rien que dans le code : par exemple, il y a à peine cinq minutes, je me suis aperçu que j'essayais se libérer un FSOUND_Stream avec un
SDL_FreeSurface ! :lol: )
Édité le 10/08/2008 à 10:16:17 par aska990
 
Hors ligne GuilOooo # Posté le 10/08/2008 à 14:40:55
PriPrOTtTt§!!!§
Avatar
Groupe : Membres
Citation : aska990

J'avoue ne pas trop comprendre l'intérêt...les defines sont faites pour ça, non ? C'est un mal d'en avoir autant ?
De plus, je peux calculer grâce à ça la place d'un élément par rapport à un autre,


L'idée était de stocker tout ça dans un fichier à part, lu soit à la compilation soit à l'exécution, de façon à pouvoir créer une nouvelle interface (un nouveau thème, quoi) bien plus facilement. Tu gagnes en extensibilité. C'est pas mal de faire comme ça, c'est juste que tu as des données dans le code source.

Ma série d'articles « Paradigmes » : Intro - Impératif
OpenCola, la seule boisson open-source au monde !
 
Hors ligne toxicopathe # Posté le 10/08/2008 à 15:45:15
Groupe : Membres
Salut à tous,

je post en réaction au post de moustick1991

je viens de tester et ca fonctionne très bien le glisser déposer, j'ai quand meme eu un pépin avec
cette partie du code :
Code : C
1
2
SDL_GetWMInfo(&wminfo); // fonction de récupération d'information système dont le handle
HWND hwnd = wminfo.window; //stoquage du handle dans hwnd


en faisant comme ci dessus ca ne fonctionne pas. Je récupère bien des evenements de type SDL_SYSWMEVENT mais aucun WM_DROPFILES ... j'ai reessayé en remplacant les les lignes ci dessus par :
Code : C
1
hwnd = GetForegroundWindow();

et là je reçois bien mon WM_DROPFILES. Seulement je trouve ma methode pas très propre dans la mesure ou la fonction que j'utilise pourrait ne pas récupérer le bon handle ... bref j'aimerai éclaicir le problème
Hors ligne Muguiwara # Posté le 12/08/2008 à 15:53:52
Duff Man !! Oh Yeah !
Avatar
Groupe : Membres
Si il est au point met un lien DDL car Le seul lecteur qui est bien c'est VLC Media player

Le monde ne sera pas détruit par ceux qui font le mal, mais par ceux qui les regardent sans rien faire.
Albert Enstein .
Site Open source Projet C++ : Site C++
 
Hors ligne royalbru # Posté le 12/08/2008 à 17:44:09
Avatar
Groupe : Membres
Salut,

Au lieu de récupérer le handle de ta fenêtre par GetForegroundWindow, récupère le par FindWindow. Tu fournis juste à la fonction le nom de classe de ta fenêtre et c'est fini ;) . Si tu ne connais pas le nom de classe de ta fenêtre, couple ta fonction avec GetClassName.

A+
Hors ligne aska990 # Posté le 16/08/2008 à 07:02:33
Je vais manger moult frites !
Avatar
Groupe : Membres
Hors ligne aska990 # Posté le 24/08/2008 à 11:42:15
Je vais manger moult frites !
Avatar
Groupe : Membres
Bon, moustick1991, le glissé/déposé ne fonctionne pas. Lorsque je glisse/dépose une musique sur ma fenêtre, j'ai un petit icône d'interdiction à la place de la souris.
 

Retour au forum "Langage C" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 268 Zéros connectés | Requêtes SQL 9 requêtes | Temps de génération de la page : Total (SQL) 0.2817s (0.2631s)