Операционные системы. Марапулец Ю.В. - 73 стр.

UptoLike

Составители: 

dwRet = mciSendCommand( mciDevice, MCI_PLAY, MCI_FROM |
MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms
);
if (dwRet != 0)
{
ReportMCIError( hWnd, dwRet );
return( FALSE );
}
return( TRUE ); // успешное завершение
}
Флаг MCI_FROM сигнализирует о присутствии определенного значения в
поле dwFrom. Флаг MCI_NOTIFY
приказывает системе отправить уведомление
в конце воспроизведения. Аудиофайлы могут быть достаточно большими,
поэтому мы позволяем подсистеме WinMM воспроизводить запись в фоновом
режиме, пока программа ShowWave выполняет следующую процедуру. Когда
подсистема WinMM обнаруживает, что достигнут конец WAV-файла, она
отправляет сообщение MM_MCINOTIFY
окну, указанному в поле dwCallback.
(При рассмотрении процедуры ShowWave_WndProc обратите внимание на
обработчик сообщения).
Уведомление не поступает до тех пор, пока устройство воспроизведения
не достигнет конца аудиофайла или позиции, заданной параметром dwTo. В
аргументе wParam уведомляющее сообщение содержит код завершения,
который говорит о том, выполнена ли операция нормально, или же она
прервана либо подавлена другой командой, адресованной к данному
устройству, или же не выполнена вообще из-за ошибки устройства. В младшем
слове аргумента lParam содержится идентификатор устройства.
Остановка воспроизведения. Команда MCI_STOP
прерывает
выполнение текущей операции. Если пользователь, начав воспроизведение
длинного аудиофайла, затем принимает решение не прослушивать его до конца,
он может щелкнуть на кнопке Stop. При этом передается сообщение
MCI_STOP,
которое отменяет воспроизведение. Подобно команде MCI_CLOSE,
в сообщении MCI_STOP не используется блок параметров.
/*-------------------------------------------------
STOP PLAY Прекращение
воспроизведения
---------------------------------------------------------*/
void StopPlay( HWND hWnd, MCIDEVICEID mciDevice )
{
DWORD dwRet;
dwRet = mciSendCommand(mciDevice, MCI_STOP, MCI_WAIT,
(DWORD)NULL );
if( dwRet != 0 )
73
      dwRet = mciSendCommand( mciDevice, MCI_PLAY, MCI_FROM |
                         MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms
                      );
      if (dwRet != 0)
      {
             ReportMCIError( hWnd, dwRet );
             return( FALSE );
      }
      return( TRUE );           // успешное завершение
}

      Флаг MCI_FROM сигнализирует о присутствии определенного значения в
поле dwFrom. Флаг MCI_NOTIFY приказывает системе отправить уведомление
в конце воспроизведения. Аудиофайлы могут быть достаточно большими,
поэтому мы позволяем подсистеме WinMM воспроизводить запись в фоновом
режиме, пока программа ShowWave выполняет следующую процедуру. Когда
подсистема WinMM обнаруживает, что достигнут конец WAV-файла, она
отправляет сообщение MM_MCINOTIFY окну, указанному в поле dwCallback.
(При рассмотрении процедуры ShowWave_WndProc обратите внимание на
обработчик сообщения).
      Уведомление не поступает до тех пор, пока устройство воспроизведения
не достигнет конца аудиофайла или позиции, заданной параметром dwTo. В
аргументе wParam уведомляющее сообщение содержит код завершения,
который говорит о том, выполнена ли операция нормально, или же она
прервана либо подавлена другой командой, адресованной к данному
устройству, или же не выполнена вообще из-за ошибки устройства. В младшем
слове аргумента lParam содержится идентификатор устройства.
      Остановка     воспроизведения.    Команда     MCI_STOP прерывает
выполнение текущей операции. Если пользователь, начав воспроизведение
длинного аудиофайла, затем принимает решение не прослушивать его до конца,
он может щелкнуть на кнопке Stop. При этом передается сообщение
MCI_STOP, которое отменяет воспроизведение. Подобно команде MCI_CLOSE,
в сообщении MCI_STOP не используется блок параметров.
/*-------------------------------------------------
   STOP PLAY Прекращение
   воспроизведения
---------------------------------------------------------*/
void StopPlay( HWND hWnd, MCIDEVICEID mciDevice )
{
        DWORD dwRet;

      dwRet = mciSendCommand(mciDevice, MCI_STOP, MCI_WAIT,
                         (DWORD)NULL );
      if( dwRet != 0 )

                                        73