2009-10-18 7 views
1

다른 프레젠테이션 기술 (Direct3D 및 WPF) 내에서 렌더링하려는 타사 ActiveX 컨트롤이 있습니다. 이렇게하려면 ActiveX 대신 화면 대신 시스템 메모리 비트 맵을 렌더링해야합니다. 이 작업을 수행 할 수있는 방법이 있지만 어디서부터 시작해야할지 모르겠습니다. 나는 네이티브 방식의 후킹을 두려워하지 않지만 어디에서 시작해야할지 모르겠습니다. 나는 BeginPaint (...)가 뜨거운 티켓일지도 모른다고 생각하고 있었다.hwnd GDI 호출을 시스템 메모리 비트 맵으로 리디렉션 하시겠습니까?

누구나이 샘플을 보았는가?

나는 WM_PRINT 형식 솔루션을 원하지 않습니다. 차라리이 코드를 적극적으로 사용하고 hwnd를 강제로 다시 칠하도록하는 것보다 반응적일 것입니다.

편집 :

모두 답이 바로 내 경우에 있었다, 그래서 각각 +1했다. 좀 더 유연한 솔루션을 제공하기를 원하지만 현재로서는 충분합니다.

답변

1

귀하의 사이트가 IOleInPlaceSiteWindowless 인터페이스를 지원합니까?

ActiveX 컨트롤의 창없는 지원은 불행히도 선택 사항입니다. 서드 파티 인터페이스가 그것을 지원한다면 당신은 원하는 서페이스에 IViewObject :: Draw를 사용하여 컨트롤을 렌더링 할 수 있습니다.

3

ActiveX 개체가 IViewObject을 지원하는지 확인하고 Draw() 메서드를 호출하여 DC로 렌더링되도록하는 것이 가장 좋습니다.

개체가 표준 OLE 인터페이스를 지원하지 않으면이 작업을 수행하는 데 매우 어려움을 겪을 것입니다. BitBlt() 등을 리디렉션하기 위해 DLL의 가져 오기 테이블을 다시 작성하는 것과 같은 악의적 인 작업을 수행해야합니다. 이러한 일을했습니다. 나는 그것을 추천하지 않는다.

다음 문제는 입력 이벤트를 올바르게 매핑하는 방법입니다.

관련 문제