Поделиться через


Интерфейс 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 представляет буфер, это растровое изображение растягивается на поверхность, в которой оно представлено: всю клиентную область окна. Это растяжение выполняется с помощью билинейной фильтрации, если целевой объект отрисовки выполняется на оборудовании, и с помощью фильтрации ближайших соседей, если целевой объект отрисовки использует программное обеспечение. (Как правило, приложение вызывает изменение размера, чтобы убедиться, что размер пикселя целевого объекта отрисовки и размер пикселей целевого объекта совпадает, и масштабирование не требуется, хотя это и не является обязательным требованием.)

В случае, когда окно переплетает адаптеры, 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 с пакетом обновления 2 (SP2) и обновлением платформы для Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 R2, Windows Server 2008 с пакетом обновления 2 (SP2) и Обновление платформы для Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header d2d1.h

См. также раздел

ID2D1RenderTarget