다음을 통해 공유


기술 영역 개요

애플리케이션에 WPF, Win32 또는 DirectX와 같은 여러 프레젠테이션 기술이 사용되는 경우 이러한 기술은 공통 최상위 창에서 렌더링 영역을 공유해야 합니다. 이 항목에서는 WPF 상호 운용 애플리케이션에 대한 프레젠테이션과 입력에 영향을 미칠 수 있는 문제를 설명합니다.

영역

최상위 창에서 상호 운용 애플리케이션의 기술 중 하나로 구성되는 각 HWND에 자체 영역("에어스페이스"라고도 함)이 포함되도록 개념화할 수 있습니다. 창 내의 각 픽셀은 해당 HWND의 영역을 형성하는 정확히 하나의 HWND에 속합니다. 엄밀히 말하면 WPF HWND가 두 개 이상 있는 경우 WPF 영역도 두 개 이상 있지만 이 설명을 위해 하나만 있다고 가정할 수 있습니다. 영역은 애플리케이션 수명 중에 해당 픽셀 위에 렌더링되는 모든 계층 또는 기타 창이 같은 렌더링 수준 기술에 포함되어야 함을 의미합니다. WPF 픽셀을 Win32 위에 렌더링하려고 시도하면 원치 않는 결과가 발생하며 이러한 시도는 상호 운용 API를 통해 가능한 한 많이 허용되지 않습니다.

영역 예제

다음 그림에서는 Win32, DirectX 및 WPF를 혼합하는 애플리케이션을 보여줍니다. 각 기술은 자체적인 별도의 겹치지 않는 픽셀 집합을 사용하고 영역 문제가 없습니다.

Win32, DirectX 및 WPF를 혼합하는 애플리케이션의 예제.

이 애플리케이션이 마우스 포인터 위치를 사용하여 이러한 세 개의 영역 위에 렌더링할 애니메이션을 만든다고 가정해 봅니다. 애니메이션 자체에 응답 가능한 기술이 무엇이든 관계없이 해당 기술은 다른 두 기술의 영역을 침해합니다. 다음 그림에서는 Win32 영역 위에 WPF 원을 렌더링하는 시도를 보여 줍니다.

Win32 영역 위에 WPF 원을 렌더링하는 시도.

또 다른 침해는 서로 다른 기술 사이에 투명도/알파 블렌딩을 사용하려는 경우입니다. 다음 그림에서 WPF 상자는 Win32 및 DirectX 영역을 침해합니다. 해당 WPF 상자의 픽셀은 반투명하므로 DirectX 및 WPF가 둘 다 공동으로 이러한 픽셀을 소유해야 하지만 이는 불가능합니다. 따라서 이는 또 다른 침해이며 빌드될 수 없습니다.

Win32 및 DirectX 영역을 위반하는 WPF 상자를 보여 주는 다이어그램.

이전 세 개의 예제에서는 사각형 영역을 사용했으나 다른 모양이 가능합니다. 예를 들어 영역에 구멍이 있을 수 있습니다. 다음 그림에서는 사각형 구멍이 있는 Win32 영역을 보여줍니다. 구멍의 크기는 WPF 및 DirectX 영역이 결합된 크기입니다.

사각형 빈 영역이 있는 Win32 영역을 보여주는 다이어그램.

영역은 완전히 사각형이 아니거나 Win32 HRGN(영역)으로 설명 가능한 모양일 수도 있습니다.

사각형이 아닌 영역을 보여주는 다이어그램.

투명도 및 최상위 창

Windows의 창 관리자는 실제로 Win32 HWND만 처리합니다. 따라서 모든 WPF Window는 HWND에 속합니다. Window HWND는 HWND에 대한 일반 규칙을 따라야 합니다. 해당 HWND 내에서 WPF 코드는 전체 WPF API가 지원하는 모든 작업을 수행할 수 있습니다. 하지만 데스크톱에 있는 다른 HWND에 대한 상호 작용의 경우, WPF는 Win32 처리 및 렌더링 규칙을 따라야 합니다. WPF는 Win32 API를 사용하여 사각형이 아닌 창을 지원합니다(사각형이 아닌 창일 경우 HRGN이며, 픽셀별 알파인 경우 겹쳐진 창).

상수 알파 및 색 키는 지원되지 않습니다. Win32 창 겹침 기능은 플랫폼에 따라 달라집니다.

창 겹침의 경우 창의 모든 픽셀에 적용할 알파 값을 지정하여 전체 창을 반투명하게 만들 수 있습니다. 실제로 Win32는 픽셀별 알파를 지원하지만 이 모드에서는 대화 상자 및 드롭다운을 포함한 모든 자식 HWND를 직접 그려야 하므로 이 기술은 실제 프로그램에서 사용하기가 매우 어렵습니다.

WPF는 HRGN을 지원하지만 이 기능에 대해 관리되는 API가 없습니다. 플랫폼 호출 및 HwndSource를 사용하여 관련 Win32 API를 호출할 수 있습니다. 자세한 내용은 관리 코드에서 네이티브 함수 호출을 참조하세요.

WPF 창 겹침에는 다양한 운영 체제에 대한 여러 가지 기능이 포함됩니다. 이는 WPF에서는 렌더링에 DirectX를 사용하고, 겹쳐진 창은 기본적으로 DirectX 렌더링이 아닌 GDI 렌더링용으로 디자인되었기 때문입니다.

  • WPF는 하드웨어 가속 창 겹침을 지원합니다.

  • WPF는 투명색 키를 지원하지 않습니다. 그 이유는 특히 렌더링이 하드웨어 가속될 경우 사용자가 요청한 정확한 색을 렌더링하도록 보장할 수 없기 때문입니다.

참고 항목