Creer une fenetre c: pour afficher l'arborescence de mon PC

Résolu
Utilisateur anonyme - 20 août 2006 à 21:36
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 21 août 2006 à 23:44
Yop!
Bon je sais le titre n'est pas très explicite mais je ne savais comment mettre en titre ce que je vaix expliquer  :-°  (du moins tenter d'expliquer)


Voilou j'ai fais un spectre visuel pour le son, donc le probleme, il est que l'on doit rentrer dans le code pour changer le son.mp3 qui est visualiser et jouer, or moi j'aimerais savoir s'il est possible de creer une boite de recherche comme quand on installe qqc on peut naviguer sur son disque dur a travers une ptite boite je ne sais plus le nom qui nous montre tout nos fichier et l'arborescence, j'aimerais savoir si c'est possible de la recreer en C pour pouvoir jouer n'importe quelle son !????!!!???!
Merci

15 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 août 2006 à 23:10
Aucune idée. À tu inclus le bon header (windows.h) et la bonne librairie (comdlg32.lib) à ton projet? Ensuite, j'ignore comment tu va procéder mais d'après ce que je vois, tu ne pourra jamais utiliser le nom du fichier avec une autre fonction car elle est en variable local. Si tu veux utiliser FileName avec plusieurs fonction, il faut la déclarer en global ou alors, la retourner de cette façon:

void box(char *FileName, int MaxPath)

OPENFILENAME ofn;
  FileName[0] = '\0';
  ZeroMemory(&ofn, sizeof(ofn));
 
  ofn.lStructSize = sizeof(ofn);
  ofn.hwndOwner = 0;
  ofn.lpstrFilter   = "Fichier mp3\0*.mp3\0\0";
  ofn.lpstrFile     = FileName;
  ofn.nMaxFile      = MaxPath;
  ofn.lpstrDefExt   = "mp3";
  ofn.lpstrTitle    = "Ouvrir un mp3...";
  ofn.Flags  = OFN_EXPLORER|OFN_FILEMUSTEXIST;

  GetOpenFileName(&ofn);
}

FileName sera alors déclaré en dehors de la fonction (dans le main par exemple) et pourra être utilisé (encore en paramètre) avec d'autre fonction l'utilisant comme suit par exemple:

int main ()
{
   char FileName[MAX_PATH+1];

   box(FileName, MAX_PATH+1);
   autrefonction(FileName);

   ...

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 août 2006 à 21:41
La fonction s'appel GetOpenFileName. Documentation ici.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
<!--
0
Utilisateur anonyme
20 août 2006 à 22:03
Bon c'est pas grave j'abandonne, je pige jamais rien a la MSDN, pour faire une fonction faut aller en voir des dizaines d'autres, etc, et quand tu copie/Colle ca marche pas etc, donc tant pis ^^ merci quand meme, et si tu as plus simple ou du deja fais je suis preneur :p
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 août 2006 à 22:12
Ya vraiment rien de compliquer avec la MSDN. GetOpenFileName est très simple, beaucoup plus que de faire sa propre fonction:


OPENFILENAME ofn;
char FileName[MAX_PATH]; //Contiendera le nom complet du fichier (c:\windows\test.txt par exemple)

FileName[0] = '\0';
ZeroMemory(&ofn, sizeof(ofn));
 
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hWnd; //Le handle de ta fenêtre mère
ofn.lpstrFilter   = "Fichier mp3\0*.mp3\0\0";
ofn.lpstrFile     = FileName;
ofn.nMaxFile      = MAX_PATH;
ofn.lpstrDefExt   = "mp3";
ofn.lpstrTitle    = "Ouvrir un mp3...";
ofn.Flags  = OFN_EXPLORER|OFN_FILEMUSTEXIST;

GetOpenFileName(&ofn);

Voilà.


C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
20 août 2006 à 22:26
#include <stdio.h>
#include <stdlib.h>
#include
#include <windows.h>




int main (int argc, char *argv[])
{
 OPENFILENAME ofn;
 char FileName[MAX_PATH]; //Contiendera le nom complet du fichier (c:\windows\test.txt par exemple)


 FileName[0] = '\0';
 ZeroMemory(&ofn, sizeof(ofn));
 
 ofn.lStructSize = sizeof(ofn);
 ofn.hwndOwner = hWnd; //Le handle de ta fenêtre mère
 ofn.lpstrFilter   = "Fichier mp3\0*.mp3\0\0";
 ofn.lpstrFile     = FileName;
 ofn.nMaxFile      = MAX_PATH;
 ofn.lpstrDefExt   = "mp3";
 ofn.lpstrTitle    = "Ouvrir un mp3...";
 ofn.Flags  = OFN_EXPLORER|OFN_FILEMUSTEXIST;


 GetOpenFileName(&ofn);


 return EXIT_SUCCESS;
}

MOi j'en suis la lol, oui désolé je ne sais pas dechiffrer des code comme les tiens encore d'un trop haut niveau pour moi
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 août 2006 à 22:36
Tu est en console? Ben alors remplace:
ofn.hwndOwner = hWnd;
par
ofn.hwndOwner = 0;
Ensuite, FileName va contenir le fichier que tu aura sélectionner dans la boite de dialogue (créé par GetOpenFileName). Si tu appuis sur Annuler, il ne contiendra que le 0 final.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 août 2006 à 22:41
Ah et aussi, je ne sais pas si GetOpenFileName inclue le 0 final dans MAX_PATH mais pour ne pas prendre de chance, déclare FileName comme ceci:

char FileName[MAX_PATH+1];
Comme ça, on est sûr d'avoir de la place pour le 0 final.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
<!--
0
Utilisateur anonyme
20 août 2006 à 22:49
oooo, ca marche en console, now je vais passer en SDL, merci !!!
0
Utilisateur anonyme
20 août 2006 à 22:59
Ben ca marche pas en SDL, ca me met des erreurs, et ca en rajoute a mon pgm, je dois mal le placer je pense, je creer un box.c dans le quel je mets:
void box()

OPENFILENAME ofn;
  char FileName[MAX_PATH+1]; //Contiendera le nom complet du fichier (c:\windows\test.txt par exemple)


  FileName[0] = '\0';
  ZeroMemory(&ofn, sizeof(ofn));
 
  ofn.lStructSize = sizeof(ofn);
  ofn.hwndOwner = 0; //Le handle de ta fenêtre mère
  ofn.lpstrFilter   = "Fichier mp3\0*.mp3\0\0";
  ofn.lpstrFile     = FileName;
  ofn.nMaxFile      = MAX_PATH;
  ofn.lpstrDefExt   = "mp3";
  ofn.lpstrTitle    = "Ouvrir un mp3...";
  ofn.Flags  = OFN_EXPLORER|OFN_FILEMUSTEXIST;


  GetOpenFileName(&ofn);
}

et ca je l'inclue dans mon spectre.c via le nom de ma fonction, mais ca me met des erreurs plus une du genre SON_LOAD already defined in spectre.c
0
Utilisateur anonyme
20 août 2006 à 23:06
in spectre.obj pardon
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 août 2006 à 23:12
Et si tu veux une sécurité dans ta fonction box, rajoute après:
OPENFILENAME ofn;
ceci:
if(MaxPath <= 0)
   return;

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
0
Utilisateur anonyme
21 août 2006 à 22:13
ca marche ^^
0
Utilisateur anonyme
21 août 2006 à 22:23
arf ca marche pas entierement, mais je te remercie pour tout ce que tu as fait, now avec tes commentaires et tout, j'ai compris et je peux le refaire moi même et modifier la fonction, alors merci !

Mais le petit probleme, il est sur la memoire, ca doit etre une histoire de pointeur, que je n'ai pas su resoudre en m'y étant bien penché ^^

en effet a la fin de mon programme, windows me marque: erreur d'application, l'instruction à "0x0036..." emploi l'adresse mémoire "0x000000", peut pas etre written, etc etc

???
0
Utilisateur anonyme
21 août 2006 à 22:27
ps: pour mon probleme précédent ou tu as dit aucune idée, en fait j'avais défini une fonction Son_Load 2 fois dans 2 fichier.h dont un qui n'avais pas de IFNTDEFINE donc voilou le probleme est reglé ^^
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 août 2006 à 23:44
"windows me marque: erreur d'application, l'instruction à "0x0036..." emploi l'adresse mémoire "0x000000", peut pas etre written, etc etc"

Ce n'est peut-être pas dû à mon bout de code. Généralement, quand une erreur comme celle-ci survien, c'est qu'il y a écriture dans une zone mémoire non aloué. Par exemple:

char test[5];

test[3] = 'a'; <- OK
test[78] = 'b'; <- !!!! ÉCRITURE DANS UNE MAUVAISE ZONE !!!!

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
0
Rejoignez-nous