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 作为混合函数。 如果显示模式为 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)
Library User32.lib
DLL User32.dll
API 集 在 Windows 8.1) 中引入的 ext-ms-win-ntuser-window-l1-1-1 (

另请参阅

AlphaBlend

概念性

CreateCompatibleBitmap

其他资源

引用

SetWindowLong

SetWindowPos

TransparentBlt

UpdateLayeredWindowIndirect

Windows