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); // 이벤트를 전달할 핸들
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); // 이벤트를 전달할 핸들