2011-02-04 2 views
4

일부 검색을 수행했지만 정확한 대답을 찾을 수 없습니다. 내 C# WPF 응용 프로그램에서 HWND 포인터를 가져 와서 C DLL로 전달합니다. 그 다음 C DLL은 GDI 호출을 사용하여 내 윈도우에 오버레이를 렌더링하려고 시도합니다. 오류는 없지만 아무 것도 나타나지 않습니다. Windows Form으로 전환하면 dll이 정상적으로 렌더링 될 수 있습니다. WindowsFormHost 컨트롤을 호스팅하고 거기에서 hwnd를 사용하면 동일한 효과가 있습니다. HwndHost 컨트롤에 대한 정보를 보았지만 실제로 원하는 것처럼 보이지 않습니다. 아마 그 통제에 대한 지식이있는 누군가 나에게 다르게 말할 수 있습니다. 나는 WPF와 같은 DirectX 렌더링에 사용 된 hwnd가 GDI를 사용할 수 없다는 것을 읽었습니다. 이게 내 시나리오를 불가능하게 만드나요? WPF 창 위에 테두리없는 양식을 중첩시켜 가짜로 만들 수도 있지만 분명히 그렇게 예쁜 것은 아닙니다. 어떤 생각이나 생각?WPF 창으로의 GDI 렌더링

답변

5

동일한 hwnd에 WPF 및 GDI 렌더링을 사용할 수는 없지만 쉽게 WPF 앱 내부에서 자식 hwnd를 사용하여 GDI를 렌더링 할 수 있습니다. HwndHost를 살펴보십시오. this article의 "WPF에서 Microsoft Win32 창 호스팅"절에 약간 자세한 내용이 있습니다. 또한이 유형의 interop을 수행 할 때 (공역과 같은) 다양한 문제에 관해 이야기합니다.

+0

응답 해 주셔서 감사합니다. 나는 이것을 보았지만 내가 찾던 것처럼 보이지 않았다. 나는 실제로 호스트 할 것이 아무것도 없다. 난 그냥 "깨끗한"hwnd GDI를 렌더링 DLL에 손을 싶어요. 안타깝게도 WPF로 마우스를 위/아래로 넘길 수 있어야합니다.하지만 이는 렌더링에 이차적입니다. 어떤 안내를 해줄 수 있습니까? –

+1

HWND가 필요하며 HwndHost가 호스팅합니다. WM_PAINT를 처리하고 장치 컨텍스트를 가져온 다음 드로잉을 시작합니다. –