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

Résolu
Signaler
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
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

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
La fonction s'appel GetOpenFileName. Documentation ici.

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

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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
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

#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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
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
<!--

oooo, ca marche en console, now je vais passer en SDL, merci !!!

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

in spectre.obj pardon
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
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

ca marche ^^

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

???

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é ^^
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
"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