begin process at 2012 05 29 21:35:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Problème : Parcourir dossier avec une ListBox


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème : Parcourir dossier avec une ListBox

dimanche 2 janvier 2005 à 20:14:19 | Problème : Parcourir dossier avec une ListBox

kuruma

Tout d'abord bonne année 2005 à tous!!!

/*avec devc++ sans librairie autre que windows.h et autre librairies standards*/

voila j'ai un petit probleme, j'aimerai a partir d'une ListBox parcourir un disque dur et faire comme si ct un explorer.
C'est a dire en cliquant sur un dossier le lister dans la meme ListBox et continuer sur un autre sous dossier... etc..
Les Disques dur etant lister dans une COMBOBOX.

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
string chemin;
switch (message)
{
case WM_COMMAND :
switch(LOWORD(wParam))
{
case ID_COMBOBOX :
{
if ((LOWORD(wParam) == ID_COMBOBOX) && (HIWORD(wParam) == LBN_SELCHANGE))
chemin = ListBii();
break;
}
case ID_LISTBOX :
{
chemin=ListBee(chemin);
break;
}
}
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}


*Ma fonction string ListBee(string chemin), liste le dossier chemin:

ex:ListBee("c:\\windows ")... etc no problem (sous dos)

*Ma fonction string ListBii(), liste un disque dur, ou autre lecteur logique, dans une COMBOBOX.

ex: je selectionne dans ma COMBOBOX c:\, listing dans ma LISTBOX. etc..no problem

*Le probleme c'est que le string chemin n'est pas modifié.... surement a cause du
"LRESULT CALLBACK WindowProcedure"

donc je ne pas parcourir les sous dossier et meme les dossiers des lesteurs autres que c:\
Le probleme ne viens pas de mes deux fonctions qui marchent sans problemes sous dos..

qq'un peut il m'aider??

Est il possible de mettre d'autres switchs dans mes switchs?

En gros mon probleme est que ma variable string chemin est apparement reinitialisée a chaque fois après un CASE:...break dans la boucle "LRESULT CALLBACK WindowProcedure".

J'ai bien sur j'ai trouvé des programmes sur le site qui marchent et font ce que je veux faire mais le code source est trop compliqué et utilise des librairies supplémentaires ou compilant avec visual c++ ou autres...et ce n'est pas ce que je veux.

Merci de votre aide!


dimanche 2 janvier 2005 à 20:15:48 | Re : Problème : Parcourir dossier avec une ListBox

kuruma


/*petite correction*/

case ID_LISTBOX :
{
if ((LOWORD(wParam) == ID_COMBOBOX) && (HIWORD(wParam) == LBN_SELCHANGE))
chemin=ListBee(chemin);
break;
}
dimanche 2 janvier 2005 à 20:16:32 | Re : Problème : Parcourir dossier avec une ListBox

kuruma

/*petite correction DSL 2fois*/

case ID_LISTBOX :
{
if ((LOWORD(wParam) == ID_LISTBOX) && (HIWORD(wParam) == LBN_SELCHANGE))
chemin=ListBee(chemin);
break;
}
lundi 3 janvier 2005 à 10:10:47 | Re : Problème : Parcourir dossier avec une ListBox

ymca2003

"En gros mon probleme est que ma variable string chemin est apparement reinitialisée a chaque fois après un CASE:...break dans la boucle "LRESULT CALLBACK WindowProcedure"."

=> c'est normal vu que c'est une variable locale, elle perd donc son contenu à la fin du switch (return ...) et reprend une nouvelle à chaque appel à WndProc, il faut la mettre ststic ou en variable globale.
lundi 3 janvier 2005 à 11:26:23 | Re : Problème : Parcourir dossier avec une ListBox

kuruma

oki d'accord mais je fais comment pour la mettre en variable globale?

je la met où dans les parametres de LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam). 
Si  je la met dans le winmain, dans ma procedre elle est pas declarée donc il faut la mettre en parametre, mais je sais pas où et comment faire, je comprends pas trop la fonction LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam).

qq un pourrait il m'expliquer merci

lundi 3 janvier 2005 à 11:52:54 | Re : Problème : Parcourir dossier avec une ListBox

ymca2003

Une variable globale est simplement une variable définie en dehors de la fonction.

string chemin;

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 ...
}

pour limiter la portée de la variable à la fonction et avoir le même effet qu'une variabme globale :

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
string chemin;

 ...
}
lundi 3 janvier 2005 à 16:14:24 | Re : Problème : Parcourir dossier avec une ListBox

kuruma

Merci mais ca je le sais....

Le probleme c'est que si je la declare en dehors de la procédure il ne la reconnais pas....
donc ca me fais une variable non declarée et mon but est de modifié chemin a chaque fois que je clique sur un élément de ma ListBox.
Mais j'ai trouver une solution à mon probleme en faisant des GetWindowText et des SetWindowText, je stocke le chemin avec SetWindowText dans un edit et je le recupere avec GetWindowText.

voici un autre probleme:
 avec toute les librairies en api win;
void ListB(char *chemin)
{
 string temp;
 DIR *rep;
 struct dirent *ep;
 struct stat infos;
 rep = opendir (chemin);
 if (rep != NULL)
 {
 SendMessage(lsthWnd, LB_RESETCONTENT , 0, 0);
  while (ep = readdir (rep))  
   {        
         stat(ep->d_name, &infos);
         if(S_ISREG(infos.st_mode))
         {
         temp=ep->d_name;
         SendMessage(lsthWnd, LB_ADDSTRING, 0, (LPARAM)(LPCTSTR)temp.c_str());
         }        
   }
 closedir (rep);
 }
 UpdateWindow(lsthWnd);
 SetFocus(lsthWnd);
}

cette fonction me liste le dossier à l'adresse du chemin.


je voudrais utiliser : WIN32_FIND_DATA
#include <windows.h>
je sais pas si'il manque des include...

void ListB(string chemin)
{
string temp;           
WIN32_FIND_DATA wData;
HANDLE listing;
SendMessage(lsthWnd, LB_RESETCONTENT , 0, 0);
// on rajoute *.* à la fin de l'adresse pour FindFirstFile()
 temp=chemin+"*.*";
 listing = FindFirstFile(chemin.c_str(), &wData); ou listing = FindFirstFile(temp.c_str(), &wData)
/*if(listing != INVALID_HANDLE_VALUE)*/
 {              
   do
   {    
                  {    
         SendMessage(lsthWnd, LB_ADDSTRING, 0, (LPARAM)(LPCTSTR)wData.cFileName);        
         }      
   }
   while (FindNextFile(listing, &wData));
FindClose(listing);

 }
 UpdateWindow(lsthWnd);
 SetFocus(lsthWnd);           
           
}      
Cette fonction ne marche pas il m'affiche une fleche dans ma listbox ..qq'un pourrait me dire ou est l'erreur
Merci!!!!!!!!!!!!

lundi 3 janvier 2005 à 16:24:40 | Re : Problème : Parcourir dossier avec une ListBox

ymca2003

Réponse acceptée !
Dans ma précédente réponse j'ai fait une erreur. Pour conserver la valeur de chemin entre les appels c'est :

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static string chemin;

 ...
}


si listing vaut INVALID_HANDLE_VALUE c'est que le chemin fourni n'est pas valide (je suppose que tu as du avoir le pb car la ligne de test est en commentaire). Vérifie s'il ne faut pas rajouter un \ à la fin du chemin  :
temp=chemin+"\\*.*";
listing = FindFirstFile(temp.c_str(), &wData);
lundi 3 janvier 2005 à 16:47:52 | Re : Problème : Parcourir dossier avec une ListBox

kuruma

MERCI beaucoup pour le static. Je trouvais pas l'erreur :p:p

euh par contre pour ma ListBee, ca marche toujours pas, je comprends pas....

Merci encore
mercredi 5 janvier 2005 à 01:47:35 | Re : Problème : Parcourir dossier avec une ListBox

kuruma

void ListB(string chemin)
{
string temp;           
WIN32_FIND_DATA wData;
HANDLE listing;
SendMessage(lsthWnd, LB_RESETCONTENT , 0, 0);
// on rajoute *.* à la fin de l'adresse pour FindFirstFile()
temp=chemin+"\\*.*";
listing = FindFirstFile(temp.c_str(), &wData);
//if(listing != INVALID_HANDLE_VALUE)
 {              
   do
   {
    if( wData.cFileName[0] != '.')
    {
     if ( wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY  )
         {    
         SendMessage(lsthWnd, LB_ADDSTRING, 0, (LPARAM)(LPCTSTR)wData.cFileName);        
         }      
    }  
   }
   while (FindNextFile(listing, &wData));
 }
 FindClose(listing);
 UpdateWindow(lsthWnd);
 SetFocus(lsthWnd);           
}

pour ceux que ca peux aider!!:p:p

->liste les dossiers du chemin donné, dans une listbox;
en remplacant cette ligne:
if ( wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY  )
->liste que les fichiers.
et si on veut tout lister bah...c logique, on vire le if :p:p


Cette discussion est classée dans : string, dossier, listbox, chemin, wparam


Répondre à ce message

Sujets en rapport avec ce message

Création de dossier - MFC [ par Rololo ] Salut à tous les programmeurs,après une demande d'un chemin d'accès et d'un nom à un utilisateur X, je souhaite créer un dossier portant le nom demand Trouver chemin de dossier [ par Gendal67 ] Salut !!J'aimerais trouver un équivalent de :GetOpenFileName(OPENFILENAME ofn);mais pour les dossiers ! Merci d'avance ! + Recupérer le chemin d'un dossier [ par seb2086 ] Bonjour ,Je voudrait savoir comment faire pour récupérer le chemin du dossier où est situer mon Executable.Merci. URG:affecter l'item séléctionner dans une listBox a une variable de type String [ par sindra ] bonsoir; j'essaye d'affecter l'item sélectionner (d'une listBox) a une variable de type String, l'affectation directe effectue une erreure puisque j Chemin d'inclusion avec GCC [ par Seigneur_Karakal ] J'ai un problème de compliation sous GCC : le compilateur ne trouve pas la classe string, pourtant le fichier string.h est bien inclus. Je pense que c Dossiers [ par Mitch986 ] Bonjour !Voilà, ma demande est assez précise... Je souhaiterai , pour un chemin d'accès donné, lister tous les dossiers (et non les fichiers) contenus Questions Manip Dossiers [ par Mitch986 ] Bonjour !Voilà, ma demande est assez précise... Je souhait Client FTP [ par letudiant42 ] SOS HELP as soon as u can,Je suis étudiant, débutant dans la prog et g un projet de client ftp à réaliser en visual C++.je dois afficher l'arborescenc Convertion String char* [ par CerberusAbaka ] Bonjour;   Je développe avec Dev C++ un petit exécutable qui converti des PostScript couleur en noir et blanc, tout marche pas trop mal mais j'ait un Vérification dossier [ par Mitch986 ] Bonjour !Je souhaiterai savoir si un fichier existe, j'ai pour le moment le code suivant :bool AWR_Shd_ShaderManager::Has_Shaders_Path (AWR_String Shd


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales