2016-07-09 9 views
0

Ich versuche, ein MP3-Lied nach dem anderen aus einer Liste zu spielen, ist das Problem, dass "warten" Befehl "freeze" das ganze Programm, bis alle Lieder zu Ende, und was Ich möchte, dass die anderen Funktionen, wie "Pause" oder "Stop", immer noch funktionieren, während das Lied abgespielt wird. Ich habe keine Probleme, wenn ich ein Lied einzeln spiele.mciSendString, sucht etwas ähnliches wie Befehl "Warten"

Ich lese einige Dokumentation und es sieht aus wie "Status" Befehl ist die Lösung, aber ich verstehe nicht, wie man es benutzt. Hier

ist der Code von „Fall IDC_Play:“

if ((SendDlgItemMessage(hDlg, IDC_CHECK1, BM_GETSTATE, NULL, NULL)) == BST_CHECKED) 
{//here goes the code for play only one song} 

else { 
    int cuenta = SendDlgItemMessage(hDlg, IDC_LIST1, LB_GETCOUNT, NULL, NULL); 
    int indice = 0; 
    while (indice != cuenta) { 
     char auxi[10] = ""; 
     UINT index = SendDlgItemMessage(hDlg, IDC_LIST1, LB_GETCURSEL, 0); 
     SendDlgItemMessage(hDlg, IDC_LIST1, LB_GETTEXT, index, (LPARAM)auxi); 
     if (strcmp(auxi, "") == 0) { 
      MessageBox(NULL, "No se selecciono cancion", "ERROR", MB_ICONERROR); 
     } 
     else { 
      char Cnum[10]; 
      aux = inicio; 
      aux = aux->sig; 
      do { 
       _itoa_s(aux->folio, Cnum, 10); 
       if (strcmp(auxi, Cnum) == 0) { 
        strcpy_s(szFileName, aux->mptres); 
        bmp1 = (HBITMAP)SendDlgItemMessage(hDlg, IDC_Imagen1, STM_GETIMAGE, IMAGE_BITMAP, 0); 
        bmp2 = (HBITMAP)LoadImage(NULL, aux->imagen, IMAGE_BITMAP, 140, 120, LR_LOADFROMFILE); 
        SendDlgItemMessage(hDlg, IDC_Imagen1, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)bmp2); 
        } 
       else { 
        aux = aux->sig; 
       } 
      } while (strcmp(auxi, Cnum) == -1 || strcmp(auxi, Cnum) == 1); 

      ShowWindow(GetDlgItem(hDlg, IDC_Play1), SW_HIDE); 
      ShowWindow(GetDlgItem(hDlg, IDC_Pause1), SW_SHOW); 

      char comillas[MAX_PATH] = "\""; 
      char comillas2[MAX_PATH] = "\""; 
      strcat_s(comillas, szFileName); 
      strcat_s(comillas, comillas2); 
      char musica[MAX_PATH] = "open "; 
      strcat_s(musica, comillas); 
      strcat_s(musica, " type mpegvideo"); 
      mciSendString(musica, NULL, 0, 0); 
      char musica1[MAX_PATH] = "play "; 
      char esperar[MAX_PATH] = " wait"; 
      strcat_s(musica1, comillas); 
      strcat_s(musica1, esperar); 
      mciSendString(musica1, NULL, 0, 0); 
      char parar[MAX_PATH] = "stop "; 
      strcat_s(parar, comillas); 
      mciSendString(parar, NULL, 0, 0); 
      char cerrar[MAX_PATH] = "close "; 
      strcat_s(cerrar, comillas); 
      mciSendString(cerrar, NULL, 0, 0); 

      index++; 
      SendDlgItemMessage(hDlg, IDC_LIST1, LB_SETCURSEL, index, NULL); 
      SendDlgItemMessage(hDlg, IDC_LIST2, LB_SETCURSEL, index, NULL); 
      SendDlgItemMessage(hDlg, IDC_LIST3, LB_SETCURSEL, index, NULL); 
      SendDlgItemMessage(hDlg, IDC_LIST4, LB_SETCURSEL, index, NULL); 
      SendDlgItemMessage(hDlg, IDC_LIST5, LB_SETCURSEL, index, NULL); 

      indice = index; 
     } //else 
    } //while 
}//else 
+0

Es gibt los keine Magie. Wenn ein Anruf blockiert, blockiert er. Sie müssen verstehen, wie Windows-Anwendungen funktionieren. Holen Sie sich eine Kopie von Charles Petzolds [Programming Windows®] (https://www.amazon.com/dp/157231995X). – IInspectable

Antwort

Verwandte Themen