Behandeln von DVD-Ereignisbenachrichtigungen
Der DVD-Navigator sendet Benachrichtigungen an ein von der Anwendung angegebenes Fenster, wenn bestimmte Ereignisse auftreten, z. B. wenn sich die DVD-Domäne ändert, wenn eine neue Ebene der übergeordneten Verwaltung gefunden wird und wenn der DVD-Navigator gerade in einen Winkelblock eintritt. Die Ereignisparameter können zusätzliche Informationen im Zusammenhang mit dem Ereignis enthalten. Fehlermeldungen und Warnungen werden ebenfalls auf diese Weise gesendet. Die Anwendung gibt das Fenster an, das die Ereignisbenachrichtigungen behandelt, indem der IMediaEventEx-Zeiger verwendet wird, um SetNotifyWindowwie folgt aufzurufen:
const DWORD WM_DVD_EVENT = WM_USER + 100;
hr = m_pIME->SetNotifyWindow(reinterpret_cast<OAHWND>(m_hWnd), WM_DVD_EVENT, 0);
Im vorherigen Beispiel ist m _ hWnd der HWND des Fensters zum Empfangen der Nachrichten, und WM _ DVD EVENT ist die _ anwendungsdefinierte Nachricht (größer als WM _ USER), die signalisiert, dass ein DVD-Ereignis stattgefunden hat. Das Ereignis selbst wird von der Anwendung durch einen Aufruf von IMediaEvent::GetEventabgerufen. Da sich zu einem bestimmten Zeitpunkt mehrere Ereignisse in der Ereigniswarteschlange befinden können, muss die Anwendung GetEvent innerhalb einer Schleife aufrufen, die wiederholt wird, bis alle Ereignisse in der Warteschlange abgerufen wurden, wie im folgenden Codebeispiel gezeigt.
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-Ereignisse können zusätzliche Informationen in den Parametern lParam1 oder lParam2 enthalten, wie oben dargestellt, wenn die aktuelle Zeit in lParam1 enthalten ist. Das obige Codebeispiel stammt aus der DVD-Beispielanwendung in Dvdcore.cpp. Eine vollständige Liste aller DVD-Ereignisse und deren Parameter finden Sie unter DVD-Ereignisbenachrichtigungscodes.