Partage
  • Partager sur Facebook
  • Partager sur Twitter

[WIN32 API]

OFN_MULTISELECT

Sujet résolu
    30 septembre 2006 à 12:51:16

    Boujour,
    je n'arrive pas a utiliser le flag OFN_MULTISELECT, quand je l'ajoute, j'ai un message d'erreur a la compilation :
    main.cpp:161: error: `OFN_MULTISELECT' undeclared (first use this function)

    Je n'ai d'ailleur pas trouver ce flag dans la doc sur le site msdn.

    Celui que j'ai trouver OFN_ALLOWMULTISELECT fonctionne mais la boite de dialogue de selection n'est pas tres jolie et fait un peu old school.

    Comment obtenir la boite de dialogue de selection de fichier qui permet la selection multiple avec un style de dialogue XP (comme celle de C::B quand on fait fichier/open par exemple)?
    Le flag OFN_MULTISELECT existe t il? (Si il n'existe pas il y a une coquille dans le tuto sur Win32 API).

    Merci
    A+
    • Partager sur Facebook
    • Partager sur Twitter
      30 septembre 2006 à 12:56:43

      Oui, je sais. Je m'en suis rendu compte plus tard, et voulais le modifier lors de la prochaine mise à jour. OFN_MULTISELECT n'existe donc pas : OFN_ALLOWMULTISELECT est donc à utiliser. Pour utiliser une boîte de dialogue style XP, vérifie déjà que tu as bien donné le style XP à ton application. (voir le chapitre 'Divers' en annexes.)
      Si ce n'est pas le cas, regarde les styles utilisés : l'utilisation de certains engendre un changement en 'Old School'.
      • Partager sur Facebook
      • Partager sur Twitter
        30 septembre 2006 à 14:49:26

        Alors je tiens a m'excuser car je me suis tres mal exprimer (en plus j'ai dit des betises).

        Donc voici mon problème :
        Sans la flag OFN_ALLOWMULTISELECT :
        Quand je lance la boite de dialogue ouvrir j'ai bien le style XP.
        La boite de dialogue est bien la même que C::B

        Avec la flag OFN_ALLOWMULTISELECT :
        Quand je lance la boite de dialogue ouvrir j'ai bien le style XP (contrairement a ce que je disais au premier post).
        Mais, la boite de dialogue n'est pas la même que sans le flag, elle a un look "Old School"
        La boite de dialogue n'est pas la même que C::B

        Ce que je veux :
        Avoir la boite de dialogue idem sans le flag mais pouvoir faire de la multi selection.

        Cela doit être possible car dans C::B c'est le cas de plus MSDN recommande de ne pas utiliser le flag OFN_ALLOWMULTISELECT donc il doit bien y avoir autre chose a faire.

        Bon ba voila j'ai trouver :

        Citation : MSDN

        OFN_ALLOWMULTISELECT
        Specifies that the File Name list box allows multiple selections. If you also set the OFN_EXPLORER flag, the dialog box uses the Explorer-style user interface; otherwise, it uses the old-style user interface.


        Il faut ajouter le flag OFN_EXPLORER si on met le flag OFN_ALLOWMULTISELECT pour avoir une boite de dialogue ouvrir permettant la multiselection et ayant une presentation "normal".

        Voila merci.
        • Partager sur Facebook
        • Partager sur Twitter
          30 septembre 2006 à 15:12:59

          Citation : moi

          Si ce n'est pas le cas, regarde les styles utilisés : l'utilisation de certains engendre un changement en 'Old School'.


          C'est l'inverse, mais l'idée était là.
          • Partager sur Facebook
          • Partager sur Twitter
            1 octobre 2006 à 8:21:45

            La structure OPENFILENAME sera bientôt expliquée dans le tuto.
            • Partager sur Facebook
            • Partager sur Twitter
              1 octobre 2006 à 10:46:44

              ...plus en détail. Je rappelle que les bases sont déjà présentes dans les pistes du TP.
              • Partager sur Facebook
              • Partager sur Twitter
                4 décembre 2006 à 15:56:49

                Bonjour, je voudrais pouvoir ajouter plusieurs musiques en meme temps sur ma playlist.
                Ma méthode pour insérer une seule musique était de copier tout le chemin dans la listbox comme ceci :
                    if(GetOpenFileName(&structureParcourir) == true)
                    {
                        SendMessage(*playList, LB_ADDSTRING, 0, (LPARAM)cheminFichier);
                    }


                Comme l'a expliqué kidpaddle2, avec :
                structureParcourir.Flags =  OFN_ALLOWMULTISELECT | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER;

                la chaine renvoyée est du type :
                "C:\\Dossier1\\Dossier2\\Musique1.mp3\0C:\\Dossier1\\Dossier2\\Musique2.wav\00"

                Moi qui ai du mal en algorithme, pouvez-vous me dire pourquoi ces méthodes ne fonctionnent pas?

                    int position = 0;
                    if(GetOpenFileName(&structureParcourir) == true)
                    {
                        for(int i = 0 ; i < strlen(cheminsFichiers) ; i++)
                        {
                            if(cheminsFichiers[i] == '\0')
                            {
                                for(int j = position ; j <= i ; j++)
                                {
                                    cheminTemporaire[strlen(cheminTemporaire)] = cheminsFichiers[j];
                                }
                                SendMessage(*playList, LB_ADDSTRING, 0, (LPARAM)cheminTemporaire);
                                position = i + 1;
                            }
                        }
                    }

                (Cette methode n'envoie rien à la listbox...)


                Celle la était cencée n'afficher que la première musique séléctionnée :

                        while(cheminsFichiers[position] != '\0')
                        {
                            cheminTemporaire[strlen(cheminTemporaire)] = cheminsFichiers[position];
                            position++;
                        }
                        cheminTemporaire[strlen(cheminTemporaire)] = '\0';
                        SendMessage(*playList, LB_ADDSTRING, 0, (LPARAM)cheminTemporaire);

                (Avec cette méthode, si je prends qu'une musique ca marche, mais si je prends plusieurs musique, ca affiche le lien jusqu'au dossier ou se trouve la musique)


                Ou peut-être auriez vous déja codés quelque chose de ce genre...!
                Merci de votre aide !!
                • Partager sur Facebook
                • Partager sur Twitter
                  4 décembre 2006 à 19:04:07

                  Salut,
                  d'après les essaie que j'ai fait, le retour de la boite de dialogue de selection est plutot de la forme :
                  C:\test\0chanson1.mp3\0chanson2.mp3\0chanson3.mp3\00


                  et pour le code de recuperation des chanson j'ai fait un truc du genre :
                  for (int i = 0; i < nbrePiste; i++)
                          {
                              //Mise a 0 de chaine
                              memcpy(chaine,"0",sizeof(chaine));
                              //Positionnement du pointeur chaineTmp dans le tableau liste
                              chaineTmp = strchr(liste,'\0')+1;
                              //Copie du repertoire dans la chaine
                              strcpy(chaine,repertoire);
                              //Concatenation avec le titre de la chanson
                              strcat(chaine,chaineTmp);
                              //Ajout de la piste a la liste chainee
                              listFichier = ajouterEnFin(listFichier, chaine);
                              //mise a jour du tableau liste ne plus prendre en compte les element deja  dans la liste
                              liste = chaineTmp;
                          }

                  Voila je t'ai mis tout plein de commentaire.
                  Bon courage.
                  A+
                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 décembre 2006 à 21:39:36

                    ok je vais voir ca ;)!
                    En tout ca merci c'est super sympa !
                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 décembre 2006 à 22:58:28

                      Désolé de ne pas avoir répondu plus tôt, internet était coupé...

                      Citation : RedNaXe


                      la chaine renvoyée est du type :

                      "C:\\Dossier1\\Dossier2\\Musique1.mp3\0C:\\Dossier1\\Dossier2\\Musique2.wav\00"

                      J'ai dit ça, moi ? C'est faux. ZeroZero a raison. Merci de m'avoir fait remarquer l'erreur, en tout cas : j'éditerais le plus tôt possible.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        5 décembre 2006 à 13:51:29

                        Citation : kidpaddle2

                        Désolé de ne pas avoir répondu plus tôt, internet était coupé...


                        :p t'excuses pas c'est pas grave!!
                        Apres tout c'est grâce à toi...que jme prends la tête sur l'API !!!! ;)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        [WIN32 API]

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown