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 빨강토끼
,
c:\program files\microsoft sdks\windows\v6.0a\include\qedit.h(498) : fatal error C1083: Cannot open include file: 'dxtrans.h': No such file or directory

vs2008 에서 DirectShow 작업을 할때 상기와 같은 에러가 나면서 컴파일이 안되었습니다.
이유는 dxtrans.h 를 찾을 수 없다는 것입니다.

예전에는 DirectShow 가 DirectX SDK안에 있었는데 언제부터인가 플랫폼 SDK로 옮겨져서
DirectShow 을 이용한 개발을 위해서 별도로 DirectX SDK를 설치하지 않아도 되는듯 합니다.

아무튼...

qedit.h 를 include 하기 전에 아래와 같은 코드를 삽입하면 해결됩니다.

#pragma include_alias( "dxtrans.h", "qedit.h" )

#define __IDxtCompositor_INTERFACE_DEFINED__

#define __IDxtAlphaSetter_INTERFACE_DEFINED__

#define __IDxtJpeg_INTERFACE_DEFINED__

#define __IDxtKey_INTERFACE_DEFINED__

#include <qedit.h>


Posted by 빨강토끼
,
Posted by 빨강토끼
,