kuruma
Messages postés22Date d'inscriptionjeudi 2 décembre 2004StatutMembreDernière intervention15 novembre 2005
-
2 janv. 2005 à 20:14
kuruma
Messages postés22Date d'inscriptionjeudi 2 décembre 2004StatutMembreDernière intervention15 novembre 2005
-
5 janv. 2005 à 01:47
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.
*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.
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);
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 3 janv. 2005 à 10:10
"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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
kuruma
Messages postés22Date d'inscriptionjeudi 2 décembre 2004StatutMembreDernière intervention15 novembre 2005 3 janv. 2005 à 11:26
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).
kuruma
Messages postés22Date d'inscriptionjeudi 2 décembre 2004StatutMembreDernière intervention15 novembre 2005 3 janv. 2005 à 16:14
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!!!!!!!!!!!!
kuruma
Messages postés22Date d'inscriptionjeudi 2 décembre 2004StatutMembreDernière intervention15 novembre 2005 5 janv. 2005 à 01:47
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