다음을 통해 공유


ID2D1HwndRenderTarget 인터페이스(d2d1.h)

그리기 지침을 창에 렌더링합니다.

상속

ID2D1HwndRenderTarget 인터페이스는 ID2D1RenderTarget에서 상속됩니다. ID2D1HwndRenderTarget 에는 다음과 같은 유형의 멤버도 있습니다.

메서드

ID2D1HwndRenderTarget 인터페이스에는 이러한 메서드가 있습니다.

 
ID2D1HwndRenderTarget::CheckWindowState

이 렌더링 대상과 연결된 HWND가 폐색되었는지 여부를 나타냅니다.
ID2D1HwndRenderTarget::GetHwnd

이 렌더링 대상과 연결된 HWND를 반환합니다.
ID2D1HwndRenderTarget::Resize

렌더링 대상의 크기를 지정된 픽셀 크기로 변경합니다. (오버로드 2/2)
ID2D1HwndRenderTarget::Resize

렌더링 대상의 크기를 지정된 픽셀 크기로 변경합니다. (오버로드 1/2)

설명

다른 렌더링 대상의 경우와 마찬가지로 그리기 명령을 실행하기 전에 BeginDraw 를 호출해야 합니다. 그리기를 완료한 후 EndDraw 를 호출하여 드로잉이 완료되었음을 나타내고 렌더링 대상을 지원하는 버퍼에 대한 액세스를 해제합니다.

ID2D1HwndRenderTarget의 경우 BeginDraw의 유일한 부작용은 그리기 명령을 실행할 수 있도록 렌더링 대상의 상태를 변경하는 것입니다.

EndDraw 는 일괄 처리된 그리기 명령을 플러시합니다. 오류가 발생하지 않은 경우 버퍼도 표시되어 연결된 창에 표시됩니다. 마지막으로 EndDraw 는 그리기 또는 프레젠테이션에서 발생한 첫 번째 오류의 HRESULT와 오류가 발생한 시점의 태그 상태를 반환합니다.

ID2D1HwndRenderTarget 개체는 이중 버퍼링되므로 실행된 그리기 명령이 즉시 나타나지 않고 오프스크린 화면에서 수행됩니다. EndDraw가 호출될 때 렌더링 오류가 없으면 오프스크린 버퍼가 표시됩니다. EndDraw에서 플러시된 일괄 처리에 렌더링 오류가 있는 경우 버퍼가 표시되지 않으며 애플리케이션에서 BeginDraw를 호출하고 프레임을 다시 그려야 합니다. 플러시를 사용하여 오류에 관계없이 프레임을 표시하려는 경우 EndDraw를 호출하기 전에 오류를 검사 수 있습니다.

하드웨어 렌더링 대상의 백 버퍼는 GetPixelSize에서 지정한 크기입니다. EndDraw가 버퍼를 표시하는 경우 이 비트맵은 표시되는 표면(창의 전체 클라이언트 영역)을 덮도록 확장됩니다. 렌더링 대상이 하드웨어에서 렌더링되는 경우 쌍선형 필터링을 사용하고 렌더링 대상이 소프트웨어를 사용하는 경우 가장 인접한 필터링을 사용하여 이 스트레치를 수행합니다. (일반적으로 애플리케이션은 Resize를 호출하여 렌더링 대상의 픽셀 크기와 대상의 픽셀 크기가 일치하는지 확인하고, 요구 사항은 아니지만 크기 조정이 필요하지 않습니다.)

창이 어댑터에 걸쳐 있는 경우 Direct2D는 렌더링이 발생하는 어댑터에서 콘텐츠를 표시해야 하는 어댑터로 오프 스크린 렌더링 대상의 부분이 복사되도록 합니다.

렌더링 대상이 있는 어댑터가 제거되었거나 애플리케이션이 실행되는 동안 드라이버가 업그레이드된 경우 EndDraw 호출에서 오류로 반환됩니다. 이 경우 애플리케이션은 필요에 따라 새 렌더링 대상 및 리소스를 만들어야 합니다.

ID2D1HwndRenderTarget 개체 만들기

ID2D1HwndRenderTarget을 만들려면 ID2D1Factory::CreateHwndRenderTarget 메서드를 사용합니다.

애플리케이션은 렌더링 대상을 한 번 만들고 애플리케이션의 수명 동안 또는 렌더링 대상의 EndDraw 메서드가 D2DERR_RECREATE_TARGET 오류를 반환할 때까지 해당 대상을 유지해야 합니다. 이 오류가 발생하면 렌더링 대상(및 만든 리소스)을 다시 만들어야 합니다.

예제

다음 예제에서는 CreateHwndRenderTarget 메서드를 사용하여 ID2D1HwndRenderTarget을 만듭니다.

RECT rc;
GetClientRect(m_hwnd, &rc);

D2D1_SIZE_U size = D2D1::SizeU(
    rc.right - rc.left,
    rc.bottom - rc.top
    );

// Create a Direct2D render target.
hr = m_pD2DFactory->CreateHwndRenderTarget(
    D2D1::RenderTargetProperties(),
    D2D1::HwndRenderTargetProperties(m_hwnd, size),
    &m_pRenderTarget
    );

다음 예제에서는 ID2D1HwndRenderTarget 을 사용하여 창에 텍스트를 그립니다.

//  Called whenever the application needs to display the client
//  window. This method writes "Hello, World"
//
//  Note that this function will automatically discard device-specific
//  resources if the Direct3D device disappears during function
//  invocation, and will recreate the resources the next time it's
//  invoked.
//
HRESULT DemoApp::OnRender()
{
    HRESULT hr;

    hr = CreateDeviceResources();

    if (SUCCEEDED(hr))
    {
        static const WCHAR sc_helloWorld[] = L"Hello, World!";

        // Retrieve the size of the render target.
        D2D1_SIZE_F renderTargetSize = m_pRenderTarget->GetSize();

        m_pRenderTarget->BeginDraw();

        m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());

        m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));

        m_pRenderTarget->DrawText(
            sc_helloWorld,
            ARRAYSIZE(sc_helloWorld) - 1,
            m_pTextFormat,
            D2D1::RectF(0, 0, renderTargetSize.width, renderTargetSize.height),
            m_pBlackBrush
            );

        hr = m_pRenderTarget->EndDraw();

        if (hr == D2DERR_RECREATE_TARGET)
        {
            hr = S_OK;
            DiscardDeviceResources();
        }
    }

    return hr;
}

이 예제에서는 코드를 생략합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 7, Windows Vista SP2 및 Windows Vista용 플랫폼 업데이트가 포함된 Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2008 R2, Windows Server 2008 SP2 및 Windows Server 2008용 플랫폼 업데이트 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 d2d1.h

추가 정보

ID2D1RenderTarget