Метод IDCompositionDevice::CreateSurfaceFromHwnd (dcomp.h)
Создает объект-оболочку, который представляет растеризацию многоуровневого окна и может быть связан с визуальным элементом для композиции.
Синтаксис
HRESULT CreateSurfaceFromHwnd(
HWND hwnd,
IUnknown **surface
);
Параметры
hwnd
Тип: [in] HWND
Дескриптор многоуровневого окна, для которого создается оболочка. Многоуровневое окно создается путем указания WS_EX_LAYERED при создании окна с помощью функции CreateWindowEx или путем установки WS_EX_LAYERED с помощью SetWindowLong после создания окна.
surface
Тип: [out] IUnknown**
Новый объект поверхности композиции. Этот параметр не должен иметь значение NULL.
Возвращаемое значение
Тип: HRESULT
Если функция выполняется успешно, она возвращает S_OK. В противном случае возвращается код ошибки HRESULT . Список кодов ошибок см. в разделе Коды ошибок DirectComposition .
Комментарии
Вы можете использовать указатель поверхности в вызовах метода IDCompositionVisual::SetContent , чтобы задать содержимое одного или нескольких визуальных элементов. После настройки содержимого визуальные элементы составляют содержимое указанного многоуровневого окна, если окно слоистый. Если окно не наложено, содержимое окна исчезает из выходных данных дерева композиции. Если позже окно будет повторно наложено, содержимое окна появляется до тех пор, пока оно по-прежнему связано с визуальным элементом.
Если размер окна изменен, затронутые визуальные элементы создаются повторно.
Содержимое окна не кэшировано за пределами срока его существования. То есть, если окно будет уничтожено, затронутые визуальные элементы перестают составлять окно.
Если окно перемещается за экран или изменяется до нуля, система перестает составлять содержимое визуальных элементов. Следует использовать функцию DwmSetWindowAttribute с флагом DWMWA_CLOAK , чтобы скрыть многоуровневые дочерние окна, если необходимо скрыть исходное окно, позволяя системе продолжать составлять содержимое визуальных элементов. Дополнительные сведения см. в разделах Анимация растрового изображения многоуровневого дочернего окна и Пример многоуровневого дочернего окна DirectComposition.
Примеры
В следующем фрагменте кода создается объект-оболочка, представляющий растеризацию многоуровневого окна.
HRESULT hr = S_OK;
IDCompositionVisual *pVisual = nullptr;
IUnknown *pSurface = nullptr;
// Create a visual. g_pDevice is the IDCompositionDevice pointer of a
// device object created earlier.
hr = g_pDevice->CreateVisual(&pVisual);
if (SUCCEEDED(hr))
{
// Create a surface that contains the image of the layered child
// window identified by the g_hwndChild window handle (HWND).
hr = g_pDevice->CreateSurfaceFromHwnd(g_hwndChild, &pSurface);
}
if (SUCCEEDED(hr))
{
// Set the content of the Control child visual.
hr = pVisual->SetContent(pSurface);
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8 [только классические приложения] |
Минимальная версия сервера | Windows Server 2012 [только классические приложения] |
Целевая платформа | Windows |
Header | dcomp.h |
Библиотека | Dcomp.lib |
DLL | Dcomp.dll |