bougnat83
Messages postés34Date d'inscriptionvendredi 28 avril 2006StatutMembreDernière intervention 3 janvier 2007
-
2 août 2006 à 21:28
bougnat83
Messages postés34Date d'inscriptionvendredi 28 avril 2006StatutMembreDernière intervention 3 janvier 2007
-
4 août 2006 à 10:07
bonjour,
windows 2000
visual c++ 6.0
je recherche un code pour créer une boite de dialogue listant les fichiers contenus dans un répertoire prédéfini (pas besoin d'explorateur), et permettant de pouvoir cliquer sur un des fichiers et en recupérer ses infos (par un appui sur ok par ex). Je voudrais en fait avoir l'équivalent de la boite CFileDialog de visual C++ mais sans la possibilité pour l'utilisateur de parcourir les repertoires, de créer un repertoire etc...
merci pour votre aide
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 août 2006 à 02:23
Et bien pour avoir une interface très basique, il suffit de créé une listbox prenant les fichiers :
Premièrement tu créé ta listbox avec CreateWindow ou avec un dialog peu importe. Ensuite, pour que ta listbox affiche les fichiers, tu peux faire comme suit:
bougnat83
Messages postés34Date d'inscriptionvendredi 28 avril 2006StatutMembreDernière intervention 3 janvier 2007 4 août 2006 à 09:16
Victoire, ça marche. voici la solution.
Dans la classe j'envoie le sendmessage, je declare l'objet dialogBox : COpenFile ptrOpenFile;
puis le send message comme suit :
::SendMessage(::GetDlgItem(ptrOpenFile.GetSafeHwnd(), IDC_LIST_IFILES), LB_DIR, DDL_ARCHIVE, (LPARAM)"c:\\windows\\system32\\*");
Donc un GRAND MERCI à [auteurdetail.aspx?ID=617077 SAKingdom] pour son aide plus que précieuse et à [auteurdetail.aspx?ID=535688 nightlord666] pour le GetSafeHwnd().
Il ne me reste plus qu'à récupérer le fichier de la liste après un clic dessus suivi d'un ok.
bougnat83
Messages postés34Date d'inscriptionvendredi 28 avril 2006StatutMembreDernière intervention 3 janvier 2007 3 août 2006 à 14:50
Bonjour. Bon ben finalement, c'est pas tout rose.
J'ai créé une listbox, seulement, lorsque j'utilise la fonction SendMessage, j'ai un probleme de compilation genre : "cette fonction ne contient pas 4 paramètres". Il ne trouve pas la bonne fonction SendMessage. J'ai mis les bonnes lib (je pense) : user32.lib , mais il semblerait qu'il ne trouve que celle définie par le stdafx.h nécessaire au projet. donc, comment faire pour qu'il reconnaisse la fonction SendMessage utilisant les 4 paramètres?
De plus, dans cette fameuse fonction "SendMessage(hListBox, LB_DIR, DDL_ARCHIVE, (LPARAM)"c:\\windows\\system\\*");", je suppose que le 1er paramètre (hListBox) est un handle sur la listbox. Or j'ai créé cette listbox graphiquement via les ressources et je ne sais pas comment récupérer le handle sur cette listbox.
Merci de vos réponses car suis un peu paumé pour être franc.
bougnat83
Messages postés34Date d'inscriptionvendredi 28 avril 2006StatutMembreDernière intervention 3 janvier 2007 3 août 2006 à 15:12
merci de ta réponse, mais ma listbox est dans un fenetre dialogbox... Bref, je vais dejà essayer ce que tu me dis et te tiens au courant. En tout cas, merci de cette réponse lumièrement rapide
bougnat83
Messages postés34Date d'inscriptionvendredi 28 avril 2006StatutMembreDernière intervention 3 janvier 2007 3 août 2006 à 15:39
ok, ca fonctionne sauf qu'il me manque encore un truc : comment récuperer le handle de ma dialogbox principale qui va me servir dans le GetDlgItem pour recuperer le handle de ma listbox.
désolé si je suis mourd...
et merci encore
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 août 2006 à 16:10
Dans la procédure (DLGPROC) de ton dialog.
C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
bougnat83
Messages postés34Date d'inscriptionvendredi 28 avril 2006StatutMembreDernière intervention 3 janvier 2007 3 août 2006 à 17:02
merci pour vos réponses, mais concernant le handle de ma dialogbox, je n'y arrive pas : je ne sais pas ou et comment utiliser la procédure (DLGPROC) et pareil pour this->GetSafeHwnd().
encore désolé ...
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 août 2006 à 17:14
Je sais plus là. Normalement en Win32, on ouvre un dialog avec DialogBoxParam ou CreateDialog (et autre) et dans les paramètres, on spécifie la procédure du dialog. Cependant, j'ignore comment procède les MFC pour créé un dialog. Comment le créé tu? Avec quelle fonction et paramètres?
C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
bougnat83
Messages postés34Date d'inscriptionvendredi 28 avril 2006StatutMembreDernière intervention 3 janvier 2007 3 août 2006 à 17:33
je la crée avec les ressources graphique de visual C++ 6.0. et voici le . cpp et le .h générés automatiquement. ça ne dvrait pourtant par être compliqué de recupérer un handle sur cette objet !!!!
COpen_File::COpen_File(CWnd* pParent /*=NULL*/)
: CDialog(COpen_File::IDD, pParent)
{
//{{AFX_DATA_INIT(COpen_File)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void COpen_File::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COpen_File)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
bougnat83
Messages postés34Date d'inscriptionvendredi 28 avril 2006StatutMembreDernière intervention 3 janvier 2007 3 août 2006 à 17:47
j'ai réussi à compiler avec le "this->GetSafeHwnd()". Seulement, à l'execution, la liste des fichiers du repertoire positionné comme tu me l'a ecrit dans sendMessage n'apparaît pas dans la listbox qui est vide...
bougnat83
Messages postés34Date d'inscriptionvendredi 28 avril 2006StatutMembreDernière intervention 3 janvier 2007 3 août 2006 à 18:44
c'est à peu près ça sauf pour le 1er paramètre :
le SendMessage est réalisé dans une autre classe donc :
dans le .h ci-dessus je déclare HWND hDlg;
et
dans le .cpp ci dessus : hDlg = this->GetSafeHwnd();
et dans la classe du sendmessage :
un pointeur sur la classe ci dessus: COpen_File ptr;
::SendMessage(::GetDlgItem(ptr->hDlg , IDC_LIST_IFILES), LB_DIR, DDL_ARCHIVE, (LPARAM)"c:\\windows\\system32\\*");
je pense que c'est ça car la je suis rentré chez moi et n'ai pas le code sous les yeux.
Donc, soit je ne pointe pas bien sur ma listbox soit j'ai un autre probleme.
J'y pense maintenant, je me demande s'il ne faut pas un genre de redraw de la boite de dialogue après le sendmessage.
Je m'y attelle demain matin et te tiens au courant.
si t'as une autre idée, n'hésites pas, je te remercie
bougnat83
Messages postés34Date d'inscriptionvendredi 28 avril 2006StatutMembreDernière intervention 3 janvier 2007 4 août 2006 à 10:07
je ne sais pas si je dois lancer un autre sujet mais comme ça a bien marché sur mon problème précédent, je vous liste ce que je dois faire maintenant :
1- Ma liste de fichiers est donc maintenant affichée dans la listbox. Je peux cliquer sur un fichier (il se surligne). Je désire à présent récuperer le nom de ce fichier.
2 - je vais créer une boite de dialogue identique avec une listbox qui va afficher la liste de fichiers d'un répertoire mais cette fois ci pour faire un "enregistrer" (toujours pas besoin d'explorer, le repertoire courant est suffisant) d'un fichier que j'aurais défini en entrée. là non plus, je ne sais pas trop comment m'y prendre...
voilà, merci