| Код | MCI_PLAY_PARMS lpPlay = {0}; lpPlay.dwFrom = 1; lpPlay.dwTo = 20000; lpPlay.dwCallback = MAKELONG((WORD)this->GetSafeHwnd(), 0); // устанавливаем окно, куда будут приходить сообщения от MCI mciSendCommand(idCD, MCI_PLAY, MCI_NOTIFY | MCI_FROM | MCI_TO, (DWORD) (LPMCI_GENERIC_PARMS)& lpPlay); |
а в PreTranslateMessage окна, которое указали в dwCallback будем смотреть какие из 4-х предусмотренных сообщений к нам придут: | Код | PreTranslateMessage(MSG* pMsg) { if(pMsg->message == MM_MCINOTIFY) { if((LONG)pMsg->lParam == idCD) { if((WPARAM)pMsg->wParam == MCI_NOTIFY_SUCCESSFUL) { MessageBox("MCI_NOTIFY_SUCCESSFUL","",0); }
if((WPARAM)pMsg->wParam == MCI_NOTIFY_ABORTED) { MessageBox("MCI_NOTIFY_ABORTED","",0); }
if((WPARAM)pMsg->wParam == MCI_NOTIFY_FAILURE) { MessageBox("MCI_NOTIFY_FAILURE","",0); }
if((WPARAM)pMsg->wParam == MCI_NOTIFY_SUPERSEDED) { MessageBox("MCI_NOTIFY_SUPERSEDED","",0); } } } }
|
и получается что все вроде нормально воспроизведется, но вот сообщений никаких не будет. Хотя в MSDN сказно: A device returns the MCI_NOTIFY_SUCCESSFUL flag with MM_MCINOTIFY when the action for a command finishes. For example, a CD audio device uses this flag for notification for the play (MCI_PLAY) command when the device finishes playing. Правда, если прервать текущую команду како-либо другой (к примеру паузу сделать), то выскакивает мессага "MCI_NOTIFY_ABORTED". Значит MCI все-же генерит какие-то сообщения, вот только почему нет сообщения по окончанию воспроизведения выбранного куска данных ?
|