IDCompositionDevice::CreateSurfaceFromHwnd メソッド (dcomp.h)
レイヤーウィンドウのラスタライズを表し、コンポジションのビジュアルに関連付けることができるラッパー オブジェクトを作成します。
構文
HRESULT CreateSurfaceFromHwnd(
HWND hwnd,
IUnknown **surface
);
パラメーター
hwnd
型: [入力] HWND
ラッパーを作成するレイヤーウィンドウのハンドル。 レイヤード ウィンドウは、CreateWindowEx 関数を使用してウィンドウを作成するときにWS_EX_LAYEREDを指定するか、ウィンドウの作成後に SetWindowLong を使用してWS_EX_LAYEREDを設定することによって作成されます。
surface
種類: [out] IUnknown**
新しいコンポジション サーフェス オブジェクト。 このパラメーターを NULL にすることはできません。
戻り値
型: HRESULT
関数が成功した場合は、S_OK を返します。 そうでない場合は、HRESULT エラー コードを返します。 エラー コードの一覧については、「 DirectComposition エラー コード 」を参照してください。
注釈
IDCompositionVisual::SetContent メソッドの呼び出しでサーフェス ポインターを使用して、1 つ以上のビジュアルのコンテンツを設定できます。 コンテンツを設定すると、ウィンドウがレイヤー化されている限り、ビジュアルは指定されたレイヤーウィンドウのコンテンツを構成します。 ウィンドウがレイヤー化されていない場合、ウィンドウの内容はコンポジション ツリーの出力から消えます。 ウィンドウが後でレイヤー化された場合は、ビジュアルに関連付けられている限り、ウィンドウコンテンツが再び表示されます。
ウィンドウのサイズを変更すると、影響を受けるビジュアルが再作成されます。
ウィンドウの内容は、ウィンドウの有効期間を超えてキャッシュされません。 つまり、ウィンドウが破棄されると、影響を受けるビジュアルはウィンドウの作成を停止します。
ウィンドウを画面外に移動するか、サイズを 0 に変更すると、システムはビジュアルのコンテンツの作成を停止します。 元のウィンドウを非表示にし、システムがビジュアルのコンテンツを作成し続けることができるようにする必要がある場合は、 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 |
ヘッダー | dcomp.h |
Library | Dcomp.lib |
[DLL] | Dcomp.dll |