Поделиться через


Функция 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

Дескриптор многоуровневого окна. Многоуровневое окно создается путем указания WS_EX_LAYERED при создании окна с помощью функции CreateWindowEx .

Windows 8. Стиль WS_EX_LAYERED поддерживается для окон верхнего и дочерних окон. Предыдущие версии Windows поддерживали WS_EX_LAYERED только для окон верхнего уровня.

[in, optional] hdcDst

Тип: HDC

Дескриптор контроллера домена для экрана. Этот дескриптор получается путем указания значения NULL при вызове функции GetDC . Он используется для сопоставления цветов палитры при обновлении содержимого окна. Если 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

Дескриптор контроллера домена для поверхности, определяющей многоуровневое окно. Этот дескриптор можно получить, вызвав функцию CreateCompatibleDC . Если фигура и визуальный контекст окна не изменяются, hdcSrc может иметь значение NULL.

[in, optional] pptSrc

Тип: POINT*

Указатель на структуру, указывающую расположение слоя в контексте устройства. Если hdcSrc имеет значение NULL, 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
Принудительная ошибка функции UpdateLayeredWindowIndirect , если текущий размер окна не соответствует размеру, указанному в psize.
 

Если hdcSrc имеет значение NULL, dwFlags должно быть равно нулю.

Возвращаемое значение

Тип: BOOL

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Исходный контроллер домена должен содержать поверхность, определяющую видимое содержимое многоуровневого окна. Например, можно выбрать растровое изображение в контексте устройства, полученном путем вызова функции CreateCompatibleDC .

Чтобы правильно задать режим зеркального отображения, приложение должно вызвать SetLayout в контексте устройства hdcSrc . SetLayout правильно зеркало все рисунки в HDC при правильном сохранении глифа текста и (при необходимости) порядка направления точечных рисунков. Он не может изменять рисование непосредственно в битах аппаратно-независимого растрового изображения (DIB). Дополнительные сведения см. в разделе Макет окна и зеркальное отображение.

Функция UpdateLayeredWindow поддерживает внешний вид окна на экране. Окна под многоуровневым окном не нужно перерисовывать при обнаружении из-за вызова Метода UpdateLayeredWindow, так как система автоматически перерисовывает их. Это обеспечивает беспроблемную анимацию многоуровневого окна.

UpdateLayeredWindow всегда обновляет все окно. Чтобы обновить часть окна, используйте традиционный WM_PAINT и задайте значение смешения с помощью SetLayeredWindowAttributes.

Для наилучшей производительности рисования многоуровневого окна и любых базовых окон многоуровневые окна должны быть как можно меньше. Приложение также должно обработать сообщение и повторно создать его многоуровневые окна при изменении глубины цвета дисплея.

Дополнительные сведения см. в разделе Многоуровневые окна.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header 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