put_MessageDrain 메서드는, 비디오 윈도우로부터 마우스 메시지와 키보드 메시지를 받아들이는 윈도우를 지정합니다.

DirectShow 를 사용한 화면에서 마우스나 키보드 이벤트가 발생시
즉 재생되고 있는 영상위에서 마우스 이벤트가 발생하거나,
사용자가 키보드입력 등을 할경우
기본적으로 이벤트는 자신의 부모 스래드(핸들)에게 이벤트를 전달합니다.
하지만 영상을 생성한(비디오윈도우를 생성한) 핸들이 아니고,
다른곳(다른윈도우 등)에서 이벤트를 받고자할경우.

put_MessageDrain 메서드를 사용하면됩니다.

CComQIPtr<IVideoWindow, &IID_IVideoWindow> pWindow = m_pGB;
    if(!pWindow)
    {
        Error(TEXT("Could not get video window interface"));
        return hr;
    }

    // set up the preview window to be in our dialog
    // instead of floating popup
    //
    RECT rc;
    ::GetWindowRect(hwndPreview, &rc);

    hr = pWindow->put_Owner((OAHWND) hwndPreview);
    hr = pWindow->put_Left(iX);
    hr = pWindow->put_Top(iY);
    hr = pWindow->put_Width(iWidth);
    hr = pWindow->put_Height(iHeight);
    hr = pWindow->put_Visible(OATRUE);
    hr = pWindow->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS);
    hr = pWindow->put_MessageDrain((OAHWND)hwndPreview); // 이벤트를 전달할 핸들
Posted by 빨강토끼
,