DVD 이벤트 알림 처리

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 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 DVD 이벤트가 발생했음을 알리는 애플리케이션 정의 메시지(WM_USER 초과)입니다. 이벤트 자체는 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에 포함된 위의 그림과 같이 추가 정보가 포함될 수 있습니다. 앞의 코드 예제는 Dvdcore.cpp의 DVD 샘플 애플리케이션에서 나온 것입니다. 모든 DVD 이벤트 및 해당 매개 변수의 전체 목록은 DVD 이벤트 알림 코드를 참조하세요.

DVD 응용 프로그램