Gestione delle notifiche degli eventi DVD

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Il navigatore DVD invia notifiche a una finestra specificata dall'applicazione quando si verificano determinati eventi, ad esempio quando il dominio DVD cambia, quando viene rilevato un nuovo livello di gestione dei genitori e quando lo strumento di navigazione DVD sta per immettere un blocco di angolo. I parametri dell'evento possono contenere informazioni aggiuntive correlate all'evento. I messaggi di errore e gli avvisi vengono inviati anche in questo modo. L'applicazione specifica la finestra che gestirà le notifiche degli eventi usando il puntatore IMediaEventEx per chiamare SetNotifyWindow, come indicato di seguito:

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

Nell'esempio precedente, m_hWnd è HWND della finestra per ricevere i messaggi e WM_DVD_EVENT è il messaggio definito dall'applicazione (maggiore di WM_USER) che segnalerà che è stato eseguito un evento DVD. L'evento stesso viene recuperato dall'applicazione tramite una chiamata a IMediaEvent::GetEvent. Poiché più eventi potrebbero trovarsi nella coda di eventi in qualsiasi momento, l'applicazione deve chiamare GetEvent all'interno di un ciclo che ripete fino a quando non sono stati recuperati tutti gli eventi in coda, come illustrato nell'esempio di codice seguente.

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
}

Gli eventi DVD possono contenere informazioni aggiuntive nei parametri lParam1 o lParam2, come illustrato sopra in cui l'ora corrente è contenuta in lParam1. L'esempio di codice precedente proviene dall'applicazione di esempio DVD in Dvdcore.cpp. Per un elenco completo di tutti gli eventi DVD e dei relativi parametri, vedere Codici di notifica eventi DVD.

Applicazioni DVD