UpdateLayeredWindow 関数 (winuser.h)
レイヤード ウィンドウの位置、サイズ、形状、内容、および透明度を更新します。
構文
BOOL UpdateLayeredWindow(
[in] HWND hWnd,
[in, optional] HDC hdcDst,
[in, optional] POINT *pptDst,
[in, optional] SIZE *psize,
[in, optional] HDC hdcSrc,
[in, optional] POINT *pptSrc,
[in] COLORREF crKey,
[in, optional] BLENDFUNCTION *pblend,
[in] DWORD dwFlags
);
パラメーター
[in] hWnd
型: HWND
階層化されたウィンドウへのハンドル。 階層化されたウィンドウは、CreateWindowEx 関数を使用してウィンドウを作成するときにWS_EX_LAYEREDを指定することによって作成されます。
Windows 8: WS_EX_LAYERED スタイルは、最上位のウィンドウと子ウィンドウでサポートされています。 以前のバージョンの Windows では、最上位のウィンドウに対してのみ WS_EX_LAYERED がサポートされています。
[in, optional] hdcDst
種類: HDC
画面の DC へのハンドル。 このハンドルは、GetDC 関数を呼び出すときに NULL を指定することによって取得されます。 ウィンドウの内容が更新されるときにパレットの色の一致に使用されます。 hdcDst が NULL の場合は、既定のパレットが使用されます。
hdcSrc が NULL の場合、hdcDst は NULL である必要があります。
[in, optional] pptDst
種類: POINT*
階層化されたウィンドウの新しい画面位置を指定する構造体へのポインター。 現在の位置が変更されていない場合は、 pptDst に NULL を指定できます。
[in, optional] psize
種類: SIZE*
レイヤーウィンドウの新しいサイズを指定する構造体へのポインター。 ウィンドウのサイズが変更されていない場合、 psize は NULL にすることができます。 hdcSrc が NULL の場合、psize は NULL である必要があります。
[in, optional] hdcSrc
種類: HDC
レイヤード ウィンドウを定義するサーフェスの DC へのハンドル。 このハンドルは、 CreateCompatibleDC 関数を呼び出すことによって取得できます。 ウィンドウの図形と視覚コンテキストが変更されていない場合、 hdcSrc は NULL にすることができます。
[in, optional] pptSrc
種類: POINT*
デバイス コンテキスト内のレイヤーの場所を指定する構造体へのポインター。 hdcSrc が NULL の場合、pptSrc は NULL である必要があります。
[in] crKey
種類: COLORREF
レイヤード ウィンドウの作成時に使用するカラー キーを指定する構造体。 COLORREF を生成するには、RGB マクロを使用します。
[in, optional] pblend
種類: BLENDFUNCTION*
レイヤード ウィンドウの作成時に使用する透明度の値を指定する構造体へのポインター。
[in] dwFlags
型: DWORD
このパラメーターには、次の値のいずれかを指定できます。
値 | 意味 |
---|---|
|
ブレンド関数として pblend を使用します。 表示モードが 256 色以下の場合、この値の効果は ULW_OPAQUE の効果と同じです。 |
|
透明度の色として crKey を使用します。 |
|
不透明なレイヤーウィンドウを描画します。 |
|
現在のウィンドウ サイズが psize で指定されたサイズと一致しない場合は、UpdateLayeredWindowIndirect 関数を強制的に失敗させます。 |
hdcSrc が NULL の場合、dwFlags は 0 である必要があります。
戻り値
種類: BOOL
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
ソース DC には、レイヤード ウィンドウの表示内容を定義するサーフェスが含まれている必要があります。 たとえば、 CreateCompatibleDC 関数を呼び出して取得したデバイス コンテキストにビットマップを選択できます。
アプリケーションは、ミラーリング モードを適切に設定するために、hdcSrc デバイス コンテキストで SetLayout を呼び出す必要があります。 SetLayout は、テキスト グリフと (必要に応じて) ビットマップ方向の順序を適切に保持しながら、すべての描画を HDC に適切にミラーします。 デバイスに依存しないビットマップ (DIB) のビットへの描画を直接変更することはできません。 詳細については、「 ウィンドウ レイアウトとミラーリング」を参照してください。
UpdateLayeredWindow 関数は、画面上のウィンドウの外観を維持します。 階層化されたウィンドウの下にあるウィンドウは、 UpdateLayeredWindow の呼び出しによって検出されたときに再描画する必要はありません。これは、システムによって自動的に再描画されるためです。 これにより、レイヤー化されたウィンドウのシームレスなアニメーションが可能になります。
UpdateLayeredWindow では、常にウィンドウ全体が更新されます。 ウィンドウの一部を更新するには、従来の WM_PAINT を使用し、 SetLayeredWindowAttributes を使用してブレンド値を設定します。
レイヤーウィンドウと基になるウィンドウによる描画パフォーマンスを最大限に高めるには、レイヤード ウィンドウをできるだけ小さくする必要があります。 また、アプリケーションでは、メッセージを処理し、ディスプレイの色深度が変更されたときに、レイヤー化されたウィンドウを再作成する必要があります。
詳細については、「 レイヤード Windows」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winuser.h (Windows.h を含む) |
Library | User32.lib |
[DLL] | User32.dll |
API セット | ext-ms-win-ntuser-window-l1-1-1 (Windows 8.1で導入) |
こちらもご覧ください
概念
その他のリソース
リファレンス