Функция 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
Этот параметр может принимать одно из указанных ниже значений.
Значение | Значение |
---|---|
|
Используйте pblend в качестве функции blend. Если в режиме отображения не более 256 цветов, эффект этого значения будет таким же, как и при ULW_OPAQUE. |
|
Используйте crKey в качестве цвета прозрачности. |
|
Нарисуйте непрозрачное многослойное окно. |
|
Принудительная ошибка функции 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) |
См. также раздел
Основные понятия
Другие ресурсы
Справочные материалы