사각형 클립 개체를 사용하여 클리핑하는 방법
참고
Windows 10 앱의 경우 DirectComposition 대신 Windows.UI.Composition API를 사용하는 것이 좋습니다. 자세한 내용은 시각적 계층을 사용하여 데스크톱 앱 현대화를 참조하세요.
이 항목에서는 사각형 클립 개체를 사용하여 시각적 개체 또는 시각적 트리를 클리핑하는 방법을 보여 줍니다.
이 항목의 예제에서는 마우스 위치 가운데에 있는 사각형 클립을 정의하고 컴퍼지션 대상 창의 클라이언트 영역 가운데에 있는 시각적 개체에 클립을 적용합니다. 이 스크린샷은 사각형 클립 개체를 시각적 개체에 적용한 결과를 보여줍니다.
알아야 하는 작업
기술
필수 구성 요소
- C/C++
- Microsoft Win32
- COM(구성 요소 개체 모델)
지침
1단계: DirectComposition 개체 초기화
- 디바이스 개체 및 컴퍼지션 대상 개체를 만듭니다.
- 시각적 개체를 만들고, 콘텐츠를 설정하고, 시각적 트리에 추가합니다.
자세한 내용은 DirectComposition을 초기화하는 방법을 참조하세요.
2단계: 사각형 클립 개체 만들기
IDCompositionDevice::CreateRectangleClip 메서드를 사용하여 사각형 클립 개체의 instance 만듭니다.
HRESULT hr = S_OK;
// Create the rectangle clip object.
if (m_pClip == NULL)
{
hr = m_pDevice->CreateRectangleClip(&m_pClip);
}
3단계: 사각형 클립 개체의 속성 설정
사각형 클립 개체의 IDCompositionRectangleClip 인터페이스의 메서드를 호출하여 클립 사각형의 속성을 설정합니다.
다음 예제에서는 현재 마우스 위치를 중심으로 하는 클립 사각형을 정의합니다. 및 m_offsetY
멤버 변수에는 m_offsetX
시각적 개체의 OffsetX 및 OffsetY 속성 값이 포함됩니다.
if (SUCCEEDED(hr))
{
// Get the location of the mouse.
POINT ptMouse = { };
GetCursorPos(&ptMouse);
ScreenToClient(m_hwnd, &ptMouse);
// Create a 100-by-100 pixel rectangular clip that is
// centered at the mouse location, and is mapped to
// the rectangle of the visual.
m_pClip->SetLeft((ptMouse.x - m_offsetX) - 50.f);
m_pClip->SetTop((ptMouse.y - m_offsetY) - 50.f);
m_pClip->SetRight((ptMouse.x - m_offsetX) + 50.f);
m_pClip->SetBottom((ptMouse.y - m_offsetY) + 50.f);
}
IDCompositionRectangleClip 인터페이스에는 모서리가 둥근 클립 사각형을 정의하기 위한 다음 메서드가 포함되어 있습니다.
4단계: 시각적 개체의 Clip 속성 설정
IDCompositionVisual::SetClip 메서드를 사용하여 시각적 개체의 Clip 속성을 사각형 클립 개체와 연결합니다.
if (SUCCEEDED(hr))
{
// Set the rectangle clip object as the Clip property
// of the visual.
hr = m_pVisual->SetClip(m_pClip);
}
5단계: 컴퍼지션 커밋
IDCompositionDevice::Commit 메서드를 호출하여 처리를 위해 명령 일괄 처리를 Microsoft DirectComposition에 커밋합니다. 클립 사각형을 적용한 결과가 대상 창에 나타납니다.
if (SUCCEEDED(hr))
{
// Commit the visual to be composed and displayed.
hr = m_pDevice->Commit();
}
6단계: DirectComposition 개체 해제
더 이상 필요하지 않은 사각형 클립 개체와 디바이스 개체, 컴퍼지션 대상 개체 및 시각적 개체를 해제해야 합니다. 다음 예제에서는 애플리케이션 정의 SafeRelease 매크로를 호출하여 DirectComposition 개체를 해제합니다.
SafeRelease(&m_pClip);
SafeRelease(&m_pDevice);
SafeRelease(&m_pD3D11Device);
SafeRelease(&m_pCompTarget);
SafeRelease(&m_pVisual);
SafeRelease(&m_pSurface);
관련 항목