IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Pré-sélection de fichiers dans CFileDialog


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut Pré-sélection de fichiers dans CFileDialog
    Bonjour à tous,

    J'utilise une CFileDialog pour sélectionner un ou plusieurs fichiers. Voici mon code pour l'ouverture de cette boîte de dialogue.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #define NB_FIC_MAX 15
    CString filtre = _T("Tous les fichiers (*.*)|*.*||");
     
    CFileDialog fileDialog(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST, filtre, this);
     
    if (repertoire.GetLength())
    	fileDialog.m_ofn.lpstrInitialDir = repertoire;
     
    fileDialog.m_ofn.lpstrTitle	= _T("Sélectionnez le(s) fichier(s) à ajouter à la liste");
    fileDialog.m_ofn.nMaxFile	= NB_FIC_MAX * (_MAX_PATH + 1) + 1;
    fileDialog.m_ofn.lpstrFile	= new char[NB_FIC_MAX * (_MAX_PATH + 1) + 1];
    *fileDialog.m_ofn.lpstrFile	= 0;
     
    if (fileDialog.DoModal() != IDOK)
    	return;
    ...
    où repertoire est une variable de type CString contenant le chemin d'un répertoire.

    Je voudrais, si c'est possible, pré-sélectionner les fichiers. Je pressens que c'est en jouant sur fileDialog.m_ofn.lpstrFile, mais je ne sais pas comment faire.

    Merci de votre aide.

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    For Explorer-style dialog boxes, the directory and file name strings are NULL separated, with an extra NULL character after the last file name
    apparemment il faut remplir le buffer comme indiqué le chemin puis les fichiers chaque élément séparé par un '\0'.
    mais je ne suis pas convaincu que les fichiers soit pré sélectionnés dans la liste...

  3. #3
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Oui, c'est aussi ce que j'avais lu dans la MSDN. Mais moi qui ne suis pas très à l'aise avec les buffers, je ne sais pas exactement comment je pourrais faire...

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    un truc comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CFileFind f;
    BOOL bMoreFiles = f.FindFile("c:\\*.*");
    int n=0;
    while (bMoreFiles)
    {
        bMoreFiles = f.FindNextFile();
        if (!f.IsDirectory())
        {
            n+=(sprintf(fileDialog.m_ofn.lpstrFile+n,"%s",static_cast<const char *>(f.GetFileName()))+1);        
        }
    }
    je n'ai pas testé le débordement de buffer et le nombre maxi de fichier,
    c'est juste pour illustrer le sprintf...
    et il faut rajouter le path en début de chaine...

  5. #5
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Merci Farscape.
    Tu avais raison : ça ne marche pas. J'ai essayé de lui passer deux fichiers à sélectionner, et au lieu de les sélectionner, il écrit le nom du premier fichier dans la combobox "Nom du fichier"...
    Tant pis !

Discussions similaires

  1. Sélection de fichiers dans une fenêtre
    Par web59matth dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/08/2010, 11h40
  2. Sélection multiple de fichiers dans TOpenDialog
    Par SOPRA-Eherve dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/05/2007, 19h02
  3. Réponses: 2
    Dernier message: 23/04/2007, 18h26
  4. sélection un ensembles de fichiers dans un répertoire
    Par da_latifa dans le forum Delphi
    Réponses: 1
    Dernier message: 13/06/2006, 20h00
  5. Mettre le nom du fichier dans TextEdit ?? Avec CFileDialog
    Par P'tit Troll dans le forum Windows
    Réponses: 2
    Dernier message: 19/04/2005, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo