Boite de dialogue [Résolu]

Signaler
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007
-
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007
-
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

17 réponses

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

SendMessage(hListBox, LB_DIR, DDL_ARCHIVE, (LPARAM)"c:\\windows\\system\\*");

Ceci affichera tout les fichiers du répertoire system dans ta listbox. Pour les extentions spécifique c'est simple: *.exe *.txt etc.

Sinon, il exist une panoplie de sources d'explorateur de fichier. Il suffit de les modifier à tes besoins. En voici un bonne:

http://www.cppfrance.com/codes/EXPLORER-SANS-MFC_10929.aspx

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution

http://programmationdebat.discutforum.com
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Ben si tu utilise les MFC, il faut ajouter :: devant


::SendMessage


Ensuite pour récupérer le handle d'un item d'un dialog c'est GetDlgItem


C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution



http://programmationdebat.discutforum.com
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
8
Avec les MFC, this->GetSafeHwnd().

//Libère ma mémoire que j'ai utilisé
this->GetCurrentConversation()->FreeAllocatedMemory(REASON_UNUSED);
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Heurk, je déteste les MFC. Sinon, comment procéde tu avec SendMessage. Comment l'utiliste tu? Comme ceci:

::SendMessage(::GetDlgItem(this->GetSafeHwnd(), IDC_LIST_IFILES), LB_DIR, DDL_ARCHIVE, (LPARAM)"c:\\windows\\system32\\*");

???

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution

http://programmationdebat.discutforum.com
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007

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.
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007

merci beaucoup pour cette réponse si rapide que je vais m'empresser de tester.
Cordialement
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007

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.
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007

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
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007

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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Dans la procédure (DLGPROC) de ton dialog.
C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution

http://programmationdebat.discutforum.com
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007

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

http://programmationdebat.discutforum.com
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007

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 !!!!

////// ///////////////   LE .CPP ////////////////////////////////////////
// Open_File.cpp : implementation file
#include "stdafx.h"
#include "sltd_ge.h"
#include "Open_File.h"
#include "Afxwin.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////
// COpen_File dialog

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
}

BEGIN_MESSAGE_MAP(COpen_File, CDialog)
    //{{AFX_MSG_MAP(COpen_File)
    ON_LBN_DBLCLK(IDC_LIST_IFILES, OnDblclkListIfiles)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COpen_File message handlers
void COpen_File::OnOK()
{
    // TODO: Add extra validation here
      CDialog::OnOK();
}

void COpen_File::OnCancel()
{
    // TODO: Add extra cleanup here
     CDialog::OnCancel();
}

void COpen_File::OnDblclkListIfiles()
{
    // TODO: Add your control notification handler code here
}

//////////// le .H   ////////////////////////////////////////////

#if !defined(AFX_OPEN_FILE_H__AA593DA7_1B1F_4A78_8FC7_9484F5003C02__INCLUDED_)
#define AFX_OPEN_FILE_H__AA593DA7_1B1F_4A78_8FC7_9484F5003C02__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Open_File.h : header file

/////////////////////////////////////////////////////////////////////////////
// COpen_File dialog
class COpen_File : public CDialog
{
// Construction
public:
    COpen_File(CWnd* pParent = NULL);   // standard constructor
    HWND hDlg;
//    HWND GetSafeHwnd();

// Dialog Data
    //{{AFX_DATA(COpen_File)
    enum { IDD = IDD_OPEN_FILE };
        // NOTE: the ClassWizard will add data members here
    //}}AFX_DATA

// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(COpen_File)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL

// Implementation
protected:
    // Generated message map functions
    //{{AFX_MSG(COpen_File)
    virtual void OnOK();
    virtual void OnCancel();
    afx_msg void OnDblclkListIfiles();
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_OPEN_FILE_H__AA593DA7_1B1F_4A78_8FC7_9484F5003C02__INCLUDED_)

Voilà, en espérant que ça puisse t'aider à me dépatouiller....
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007

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...
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007

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
Messages postés
2
Date d'inscription
jeudi 3 août 2006
Statut
Membre
Dernière intervention
3 août 2006

je sais pas comment faire une application en c mais avec spouris comment faire?
Messages postés
34
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
3 janvier 2007

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