Partage
  • Partager sur Facebook
  • Partager sur Twitter

[winAPI+fmod] Dissocier unic/multiselect pour une open dialog box ?

+ Rajouter des éléments à la playlist ?

    29 mai 2006 à 19:07:27

    Bonjour,

    J'aurais besoin d'aide avec mon lecteur mp3 ... afin de le finaliser, il faudrait que l'on puisse :

    - Rajouter des éléments à la playlist (donc [ici] au début du code, passer n à n d'avant + 1 je suppose, mais à ce moment là je ne sais pas comment associer les fichiers à l'un ou l'autre chemin d'accès ...[de toute façon ça plante])

    - Dissocier les cas si on sélectionne UN ou PLUSIEURS fichiers (afin d'utiliser un code différent selon le cas)
    Car ce code ne marche pas : (on ne rentre pas dans le "else")

    Peut être ais-je mal compris la forme de szFile ?
    [ Forme présumée, après traduction de msdn :
    //cas multiselect
    szFile = "C:\Music\0Salut.mp3\0DernierTruc.mp3\00"
    //cas unic-select
    szFile = "C:\Music\Salut.mp3"
    ]

    Code : C

    //déclarations :
    char path[1000][512];
    char name[1000][128];
    char temp[1000];

    //Dans callback de la dialogBox  "mp3"
    if(LOWORD(wParam) == ID_BROWSE)
          {
                    OPENFILENAME ofn;
                    CHAR szFile[5000]={0};

                    ZeroMemory(&ofn, sizeof(OPENFILENAME));
                    ofn.lStructSize = sizeof(OPENFILENAME);
                    ofn.hwndOwner = hDlg;
                    ofn.lpstrFile = szFile;
                    ofn.nMaxFile = 2998;
                    ofn.lpstrFilter =
                               "Mpeg layer 3\0*.mp3\0";
                    ofn.nFilterIndex = 1;
                    ofn.Flags =
                           OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_EXPLORER;
                         if (GetOpenFileName(&ofn)==TRUE)
                            { /* Ici que ca commence... */
    //on essaye de dissocier les cas unic ou  multiselect...
                                if(strchr(szFile, '\00') != NULL)
                                {
                                char *ap[3000] =
                                {
                                0
                                };
    size_t n = 0;
       ap[n] = szFile;
       n++;

       {
          char *p_beg = szFile;
          while (p_beg[0] != 0 || p_beg[ -1] != 0)
          {
             char *p_end = strchr(p_beg, 0);
             if (p_end != NULL)
             {
                p_beg = p_end + 1;
                ap[n] = p_beg;
                n++;
             }
             else
             {
                break;
             }
          }
       }


        for(i = 1; i < n - 1; i++)
          {
              size_t size = sizeof "\\" + strlen(ap[i]);
              char *p = malloc (size);
              strcpy (p, "\\");
              strcat (p, ap[i]);
              strcpy(temp, ap[0]); // attribue le chemin du dossier
              strcat(temp, p); // concatène avec le nom de la musique
              free(p), p = NULL;
              strcpy(path[i], temp); // copie le tout dans mon tableau de string
              strcpy(name[i], ap[i]); // récupère le nom de la chanson
             SendMessage(hList, LB_ADDSTRING, 0, (LONG)name[i]); /* affiche dans la listbox */
          }
                                }
    // mais dans le cas d'un unic, on ne rentre pas dans le else
                                else
                            {
                                strcpy(path[0], szFile);
                                strcpy(name[0], strrchr(szFile, '\\'));
                                SendMessage(hList, LB_ADDSTRING, 0, (LONG)name[0]);
                            }
                           
                      numberItems = SendMessage(hList, LB_GETCOUNT, 0, 0);
                SendMessage(hList, LB_SETCURSEL, 0, 0);
          }
          }


    Pourriez vous m'aider à résoudre ces problèmes ?
    [je sais que je poste beaucoup, mais j'en ai vraiment assez d'échecs consécutifs... Mon idée de la forme du szFile est peut être erronée ?]

    Merci d'avance.

    P.S: Au cas où qu'il y ait encore du monde qui me dise que je raconte n'importe quoi, une chaine de caractère avec plusieurs caractères NULL existe... inventées par la firme de billou.
    • Partager sur Facebook
    • Partager sur Twitter

    [winAPI+fmod] Dissocier unic/multiselect pour une open dialog box ?

    × 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