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


Метод ID2D1RenderTarget::P ushLayer(constD2D1_LAYER_PARAMETERS&,ID2D1Layer*) (d2d1.h)

Добавляет указанный слой в целевой объект отрисовки, чтобы он получал все последующие операции рисования до вызова PopLayer .

Синтаксис

void PushLayer(
  [ref] const D2D1_LAYER_PARAMETERS & layerParameters,
  [in]  ID2D1Layer                    *layer
);

Параметры

[ref] layerParameters

Тип: const D2D1_LAYER_PARAMETERS

Параметры границ содержимого, геометрической маски, непрозрачности, маски непрозрачности и сглаживания для слоя.

[in] layer

Тип: ID2D1Layer*

Слой, который получает последующие операции рисования.

Примечание Начиная с Windows 8 этот параметр является необязательным. Если слой не указан, Direct2D автоматически управляет ресурсом слоя.
 

Возвращаемое значение

None

Remarks

Метод PushLayer позволяет вызывающей объекту начать перенаправление отрисовки на слой. Все операции отрисовки допустимы в слое. На расположение слоя влияет преобразование мира, заданное в целевом объекте отрисовки.

Каждый PushLayer должен иметь соответствующий вызов PopLayer . Если вызовов PopLayer больше, чем вызовов PushLayer , целевой объект отрисовки помещается в состояние ошибки. Если метод Flush вызывается до того, как будут выброшены все оставшиеся слои, целевой объект отрисовки помещается в состояние ошибки и возвращается ошибка. Состояние ошибки может быть очищено вызовом Метода EndDraw.

Определенный ресурс ID2D1Layer может быть активен только за один раз. Иными словами, нельзя вызвать метод PushLayer , а затем сразу же использовать другой метод PushLayer с тем же ресурсом слоя. Вместо этого необходимо вызвать второй метод PushLayer с разными ресурсами слоя.

Этот метод не возвращает код ошибки в случае сбоя. Чтобы определить, завершилась ли операция рисования (например, PushLayer), проверка результат, возвращаемый методами ID2D1RenderTarget::EndDraw или ID2D1RenderTarget::Flush.

Примеры

В следующем примере слой используется для обрезки растрового изображения в геометрическую маску. Полный пример см. в разделе Как обрезать геометрическую маску.

HRESULT DemoApp::RenderWithLayer(ID2D1RenderTarget *pRT)
{
    HRESULT hr = S_OK;

    // Create a layer.
    ID2D1Layer *pLayer = NULL;
    hr = pRT->CreateLayer(NULL, &pLayer);

    if (SUCCEEDED(hr))
    {
        pRT->SetTransform(D2D1::Matrix3x2F::Translation(350, 50));

        // Push the layer with the geometric mask.
        pRT->PushLayer(
            D2D1::LayerParameters(D2D1::InfiniteRect(), m_pPathGeometry),
            pLayer
            );
            
  
        pRT->DrawBitmap(m_pOrigBitmap, D2D1::RectF(0, 0, 200, 133));
        pRT->FillRectangle(D2D1::RectF(0.f, 0.f, 25.f, 25.f), m_pSolidColorBrush);  
        pRT->FillRectangle(D2D1::RectF(25.f, 25.f, 50.f, 50.f), m_pSolidColorBrush);
        pRT->FillRectangle(D2D1::RectF(50.f, 50.f, 75.f, 75.f), m_pSolidColorBrush); 
        pRT->FillRectangle(D2D1::RectF(75.f, 75.f, 100.f, 100.f), m_pSolidColorBrush);    
        pRT->FillRectangle(D2D1::RectF(100.f, 100.f, 125.f, 125.f), m_pSolidColorBrush); 
        pRT->FillRectangle(D2D1::RectF(125.f, 125.f, 150.f, 150.f), m_pSolidColorBrush);    
        

        pRT->PopLayer();
    }

    SafeRelease(&pLayer);

    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
Библиотека D2d1.lib
DLL D2d1.dll

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

ID2D1RenderTarget

Общие сведения о слоях

PopLayer