다음을 통해 공유


사각형 클립 개체를 사용하여 클리핑하는 방법

참고

Windows 10 앱의 경우 DirectComposition 대신 Windows.UI.Composition API를 사용하는 것이 좋습니다. 자세한 내용은 시각적 계층을 사용하여 데스크톱 앱 현대화를 참조하세요.

이 항목에서는 사각형 클립 개체를 사용하여 시각적 개체 또는 시각적 트리를 클리핑하는 방법을 보여 줍니다.

이 항목의 예제에서는 마우스 위치 가운데에 있는 사각형 클립을 정의하고 컴퍼지션 대상 창의 클라이언트 영역 가운데에 있는 시각적 개체에 클립을 적용합니다. 이 스크린샷은 사각형 클립 개체를 시각적 개체에 적용한 결과를 보여줍니다.

시각적 개체에 사각형 클립 개체를 적용한 결과

알아야 하는 작업

기술

필수 구성 요소

  • C/C++
  • Microsoft Win32
  • COM(구성 요소 개체 모델)

지침

1단계: DirectComposition 개체 초기화

  1. 디바이스 개체 및 컴퍼지션 대상 개체를 만듭니다.
  2. 시각적 개체를 만들고, 콘텐츠를 설정하고, 시각적 트리에 추가합니다.

자세한 내용은 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);

클리핑