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 を指定することによって取得されます。 ウィンドウの内容が更新されるときにパレットの色の一致に使用されます。 hdcDstNULL の場合は、既定のパレットが使用されます。

hdcSrcNULL の場合、hdcDstNULL である必要があります。

[in, optional] pptDst

種類: POINT*

階層化されたウィンドウの新しい画面位置を指定する構造体へのポインター。 現在の位置が変更されていない場合は、 pptDstNULL を指定できます。

[in, optional] psize

種類: SIZE*

レイヤーウィンドウの新しいサイズを指定する構造体へのポインター。 ウィンドウのサイズが変更されていない場合、 psizeNULL にすることができますhdcSrcNULL の場合、psizeNULL である必要があります。

[in, optional] hdcSrc

種類: HDC

レイヤード ウィンドウを定義するサーフェスの DC へのハンドル。 このハンドルは、 CreateCompatibleDC 関数を呼び出すことによって取得できます。 ウィンドウの図形と視覚コンテキストが変更されていない場合、 hdcSrcNULL にすることができます

[in, optional] pptSrc

種類: POINT*

デバイス コンテキスト内のレイヤーの場所を指定する構造体へのポインター。 hdcSrcNULL の場合、pptSrcNULL である必要があります。

[in] crKey

種類: COLORREF

レイヤード ウィンドウの作成時に使用するカラー キーを指定する構造体。 COLORREF を生成するには、RGB マクロを使用します。

[in, optional] pblend

種類: BLENDFUNCTION*

レイヤード ウィンドウの作成時に使用する透明度の値を指定する構造体へのポインター。

[in] dwFlags

型: DWORD

このパラメーターには、次の値のいずれかを指定できます。

意味
ULW_ALPHA
0x00000002
ブレンド関数として pblend を使用します。 表示モードが 256 色以下の場合、この値の効果は ULW_OPAQUE の効果と同じです。
ULW_COLORKEY
0x00000001
透明度の色として crKey を使用します。
ULW_OPAQUE
0x00000004
不透明なレイヤーウィンドウを描画します。
ULW_EX_NORESIZE
0x00000008
現在のウィンドウ サイズが psize で指定されたサイズと一致しない場合は、UpdateLayeredWindowIndirect 関数を強制的に失敗させます。
 

hdcSrcNULL の場合、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で導入)

こちらもご覧ください

AlphaBlend

概念

CreateCompatibleBitmap

その他のリソース

リファレンス

SetWindowLong

Setwindowpos

TransparentBlt

UpdateLayeredWindowIndirect

Windows