Метод 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*
Слой, который получает последующие операции рисования.
Возвращаемое значение
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 |