Метод IDCompositionDevice::CreateTargetForHwnd (dcomp.h)
Создает целевой объект композиции, привязанный к окну, представленному указанным дескриптором окна (HWND).
Синтаксис
HRESULT CreateTargetForHwnd(
[in] HWND hwnd,
[in] BOOL topmost,
[out] IDCompositionTarget **target
);
Параметры
[in] hwnd
Тип: HWND
Окно, к которому должен быть привязан целевой объект композиции. Этот параметр не должен иметь значение NULL.
[in] topmost
Тип: BOOL
Значение TRUE, если визуальное дерево должно отображаться поверх дочерних элементов окна, указанного параметром hwnd ; в противном случае визуальное дерево отображается за дочерними элементами.
[out] target
Тип: IDCompositionTarget**
Новый целевой объект композиции. Этот параметр не должен иметь значение NULL.
Возвращаемое значение
Тип: HRESULT
Если функция завершается успешно, она возвращает S_OK. В противном случае возвращается код ошибки HRESULT . Список кодов ошибок см. в разделе Коды ошибок DirectComposition .
Комментарии
Визуальное дерево Microsoft DirectComposition должно быть привязано к окну, прежде чем что-либо можно будет отобразить на экране. Окно может быть окном верхнего уровня или дочерним окном. В любом случае окно может быть многослойным, но во всех случаях окно должно принадлежать вызывающей процедуре. Если окно принадлежит другому процессу, этот метод возвращает DCOMPOSITION_ERROR_ACCESS_DENIED.
Когда содержимое DirectComposition состоит в окне, содержимое всегда создается поверх всего, что обращается непосредственно к окну через контекст устройства (HDC), возвращаемый функцией GetDC , или посредством вызовов методов Microsoft DirectX Present . Однако, поскольку правила обрезки окон применяются к содержимому DirectComposition, если в окне есть дочерние окна, эти дочерние окна могут обрезать визуальное дерево. Самый верхний параметр определяет, обрезают ли дочерние окна визуальное дерево.
По сути, каждое окно состоит из четырех уровней:
- Содержимое, нарисованное непосредственно в дескриптор окна (это самый нижний слой).
- Необязательное визуальное дерево DirectComposition.
- Содержимое всех дочерних окон, если таковые есть.
- Другое необязательное визуальное дерево DirectComposition (это самый верхний слой).
Для каждого окна в системе можно создать не более двух целевых объектов композиции: один самый верхний и один не самый верхний. Если целевой объект композиции уже привязан к указанному окну на указанном уровне, этот метод завершается ошибкой. При уничтожении целевого объекта композиции слой, который он составил, доступен для использования новым целевым объектом композиции.
Примеры
В следующем примере создается и инициализируется объект устройства, а затем он привязывается к целевому окну композиции.
#include <dcomp.h>
#include <d3d11.h>
HRESULT InitializeDirectCompositionDevice(HWND hwndTarget,
ID3D11Device **ppD3D11Device, IDCompositionDevice **ppDevice,
IDCompositionTarget **ppCompTarget)
{
HRESULT hr = S_OK;
D3D_FEATURE_LEVEL featureLevelSupported;
IDXGIDevice *pDXGIDevice = nullptr;
// Verify that the arguments are valid.
if (hwndTarget == NULL || ppD3D11Device == nullptr || ppDevice == nullptr ||
ppCompTarget == nullptr)
{
return E_INVALIDARG;
}
// Create the D3D device object. Note that the
// D3D11_CREATE_DEVICE_BGRA_SUPPORT flag is needed for rendering
// on surfaces using Direct2D.
hr = D3D11CreateDevice(
nullptr,
D3D_DRIVER_TYPE_HARDWARE,
NULL,
D3D11_CREATE_DEVICE_BGRA_SUPPORT, // needed for rendering on surfaces using Direct2D
NULL,
0,
D3D11_SDK_VERSION,
ppD3D11Device,
&featureLevelSupported,
NULL);
if (SUCCEEDED(hr))
{
// Create the DXGI device used to create bitmap surfaces.
hr = (*ppD3D11Device)->QueryInterface(&pDXGIDevice);
}
if (SUCCEEDED(hr))
{
// Create the DirectComposition device object.
hr = DCompositionCreateDevice(pDXGIDevice, __uuidof(IDCompositionDevice),
reinterpret_cast<void **>(ppDevice));
}
if (SUCCEEDED(hr))
{
// Bind the DirectComposition device to the target window.
hr = (*ppDevice)->CreateTargetForHwnd(hwndTarget, TRUE, ppCompTarget);
}
return hr;
}
Требования
Минимальная версия клиента | Windows 8 [только классические приложения] |
Минимальная версия сервера | Windows Server 2012 [только классические приложения] |
Целевая платформа | Windows |
Header | dcomp.h |
Библиотека | Dcomp.lib |
DLL | Dcomp.dll |