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,hdcDst 必須是 NULL

[in, optional] pptDst

類型: POINT*

結構的指標,指定分層視窗的新螢幕位置。 如果目前的位置未變更, pptDst 可以是 NULL

[in, optional] psize

類型: SIZE*

結構的指標,指定分層視窗的新大小。 如果視窗的大小未變更, psize 可以是 NULL。 如果 hdcSrcNULL,psize 必須是 NULL

[in, optional] hdcSrc

類型: HDC

定義分層視窗之表面之 DC 的句柄。 呼叫 CreateCompatibleDC 函式即可取得此句柄。 如果視窗的圖形和視覺內容未變更, hdcSrc 可以是 NULL

[in, optional] pptSrc

類型: POINT*

結構的指標,指定裝置內容中圖層的位置。 如果 hdcSrcNULL則 pptSrc 應該是 NULL

[in] crKey

類型: COLORREF

結構,指定要在撰寫分層視窗時使用的色彩索引鍵。 若要產生 COLORREF,請使用 RGB 宏。

[in, optional] pblend

類型: BLENDFUNCTION*

結構的指標,指定撰寫分層視窗時要使用的透明度值。

[in] dwFlags

類型: DWORD

此參數可以是下列其中一個值。

意義
ULW_ALPHA
0x00000002
使用 pblend 作為 blend 函式。 如果顯示模式為 256 個色彩或更少,則這個值的效果與 ULW_OPAQUE的效果相同。
ULW_COLORKEY
0x00000001
使用 crKey 做為透明度色彩。
ULW_OPAQUE
0x00000004
繪製不透明的分層視窗。
ULW_EX_NORESIZE
0x00000008
如果目前的視窗大小不符合 psize 中指定的大小,則強制 UpdateLayeredWindowIndirect 函式失敗。
 

如果 hdcSrcNULL,dwFlags 應為零。

傳回值

類型: BOOL

如果函式成功,則傳回非零的值。

如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 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)
程式庫 User32.lib
Dll User32.dll
API 集合 ext-ms-win-ntuser-window-l1-1-1 (在 Windows 8.1) 中引進

另請參閱

AlphaBlend

概念

CreateCompatibleBitmap

其他資源

參考

SetWindowLong

SetWindowPos

TransparentBlt

UpdateLayeredWindowIndirect

Windows