Обработка уведомлений о событиях DVD

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

DVD-навигатор отправляет уведомления в указанное приложением окно, когда происходят определенные события, например при изменении домена DVD, при обнаружении нового уровня родительского управления и когда DVD-навигатор входит в угловой блок. Параметры события могут содержать дополнительные сведения, связанные с событием. Таким образом также отправляются сообщения об ошибках и предупреждения. Приложение указывает окно, которое будет обрабатывать уведомления о событиях с помощью указателя IMediaEventEx для вызова SetNotifyWindow, следующим образом:

const DWORD WM_DVD_EVENT = WM_USER + 100;
hr = m_pIME->SetNotifyWindow(reinterpret_cast<OAHWND>(m_hWnd), WM_DVD_EVENT, 0);

В предыдущем примере m_hWnd — это HWND окна для получения сообщений, а WM_DVD_EVENT — определяемое приложением сообщение (больше WM_USER), которое будет сигнализировать о том, что произошло событие DVD. Само событие извлекается приложением через вызов метода IMediaEvent::GetEvent. Так как в очереди событий в любой момент времени может находиться несколько событий, приложение должно вызывать GetEvent в цикле, который повторяется до тех пор, пока не будут получены все события в очереди, как показано в следующем примере кода.

while (SUCCEEDED(m_pIME->GetEvent(&lEvent, &lParam1, &lParam2, lTimeOut)))
{
    HRESULT hr;
    switch (lEvent)
    {

    case EC_DVD_CURRENT_HMSF_TIME:
        {
            DVD_HMSF_TIMECODE *pTC = reinterpret_cast<DVD_HMSF_TIMECODE *>(&lParam1);
            m_CurTime = *pTC;
            ...
        }
        break;
        ...
    } // switch
}

События DVD могут содержать дополнительные сведения в параметрах lParam1 или lParam2 , как показано выше, где текущее время содержится в lParam1. Приведенный выше пример кода получен из примера приложения DVD в Dvdcore.cpp. Полный список всех событий DVD и их параметров см. в разделе Коды уведомлений о событиях DVD.

Dvd-приложения