2016-07-09 6 views
0

나는 목록에서 다른 노래 다음에 mp3 노래를 재생하려고하는데 문제는 모든 노래가 끝날 때까지 "대기"명령으로 모든 프로그램이 "정지"되고 노래를 재생하는 동안 "일시 중지"또는 "중지"와 같은 다른 기능을 계속 사용하고 싶습니다. 하나의 노래를 개별적으로 연주 할 때 어떤 문제도 없습니다.mciSendString, 명령 "wait"와 비슷한 것을 검색

설명서를 읽었을 때 "상태"명령이 해결책 인 것처럼 보였지만 사용 방법을 모르겠다. "경우 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

없습니다 :

것은 CodeProject의에서 콜백 거기 플래그를 사용의 예를 참조하십시오. 호출이 차단되면 차단됩니다. Windows 응용 프로그램의 작동 방식을 이해해야합니다. Charles Petzold의 [Programming Windows®] (https://www.amazon.com/dp/157231995X) 사본을 얻으십시오. – IInspectable

답변