Функция DeferWindowPos (winuser.h)
Обновления указанную структуру позиции с несколькими окнами для указанного окна. Затем функция возвращает дескриптор обновленной структуре. Функция EndDeferWindowPos использует сведения в этой структуре для одновременного изменения положения и размера нескольких окон. Функция BeginDeferWindowPos создает структуру .
Синтаксис
HDWP DeferWindowPos(
[in] HDWP hWinPosInfo,
[in] HWND hWnd,
[in, optional] HWND hWndInsertAfter,
[in] int x,
[in] int y,
[in] int cx,
[in] int cy,
[in] UINT uFlags
);
Параметры
[in] hWinPosInfo
Тип: HDWP
Дескриптор структуры позиции с несколькими окнами, которая содержит сведения о размере и положении для одного или нескольких окон. Эта структура возвращается методом BeginDeferWindowPos или последним вызовом DeferWindowPos.
[in] hWnd
Тип: HWND
Дескриптор для окна, для которого сведения об обновлении хранятся в структуре . Все окна в структуре позиции с несколькими окнами должны иметь один и тот же родительский элемент.
[in, optional] hWndInsertAfter
Тип: HWND
Дескриптор окна, предшествующего расположенному окну в порядке Z. Этот параметр должен быть дескриптором окна или одним из следующих значений. Этот параметр игнорируется, если флаг SWP_NOZORDER установлен в параметре uFlags .
[in] x
Тип: int
Координата X верхнего левого угла окна.
[in] y
Тип: int
Координата Y верхнего левого угла окна.
[in] cx
Тип: int
Новая ширина окна в пикселях.
[in] cy
Тип: int
Новая высота окна в пикселях.
[in] uFlags
Тип: UINT
Сочетание следующих значений, влияющих на размер и положение окна.
Значение | Значение |
---|---|
|
Рисует рамку (определенную в описании класса окна) вокруг окна. |
|
Отправляет WM_NCCALCSIZE сообщение в окно, даже если размер окна не изменяется. Если этот флаг не указан, WM_NCCALCSIZE отправляется только при изменении размера окна. |
|
Скрывает окно. |
|
Не активирует окно. Если этот флаг не задан, окно активируется и перемещается в верхнюю часть самой верхней или самой верхней группы (в зависимости от параметра hWndInsertAfter ). |
|
Удаляет все содержимое клиентской области. Если этот флаг не указан, допустимое содержимое клиентской области сохраняется и копируется обратно в клиентную область после изменения размера окна. |
|
Сохраняет текущую позицию (игнорирует параметры x и y ). |
|
Не изменяет положение окна владельца в порядке Z. |
|
Не перерисовывает изменения. Если этот флаг установлен, перерисовка не выполняется. Это относится к клиентской области, неклиентской области (включая заголовок и полосы прокрутки) и любой части родительского окна, обнаруженной в результате перемещения окна. Если этот флаг установлен, приложение должно явно сделать недействительными или перерисовывать все части окна и родительского окна, которые требуют перерисовки. |
|
То же, что и флаг SWP_NOOWNERZORDER . |
|
Запрещает окно получать сообщение WM_WINDOWPOSCHANGING . |
|
Сохраняет текущий размер (игнорирует параметры cx и cy ). |
|
Сохраняет текущий порядок Z (игнорирует параметр hWndInsertAfter ). |
|
Отображает окно . |
Возвращаемое значение
Тип: HDWP
Возвращаемое значение определяет обновленную структуру позиции с несколькими окнами. Дескриптор, возвращаемый этой функцией, может отличаться от дескриптора, переданного функции. Новый дескриптор, возвращающийся этой функцией, должен быть передан во время следующего вызова функции DeferWindowPos или EndDeferWindowPos .
Если для успешного выполнения функции недостаточно системных ресурсов, возвращаемое значение равно NULL. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Если вызов DeferWindowPos завершается сбоем, приложение должно отказаться от операции размещения окна и не вызывать EndDeferWindowPos.
Если SWP_NOZORDER не указан, система помещает окно, определяемое параметром hWnd , в положение после окна, определенного параметром hWndInsertAfter . Если hWndInsertAfter имеет значение NULL или HWND_TOP, система размещает окно hWnd в верхней части порядка Z. Если параметр hWndInsertAfter имеет значение HWND_BOTTOM, система помещает окно hWnd в нижней части порядка Z.
Все координаты дочерних окон находятся относительно левого верхнего угла клиентской области родительского окна.
Окно можно сделать самым верхним окном, установив флаг HWND_TOPMOSThWndInsertAfter и убедив, что флаг SWP_NOZORDER не установлен, или установив положение окна в порядке Z, чтобы оно было выше всех существующих верхних окон. Если окно, отличное от верхнего, делается самым верхним, его собственные окна также делаются самыми верхними. Его владельцы, однако, не меняются.
Если ни SWP_NOACTIVATE , ни SWP_NOZORDER флаг (то есть, когда приложение запрашивает одновременную активацию окна и изменение его позиции в порядке Z), значение, указанное в hWndInsertAfter , используется только в следующих случаях:
- В hWndInsertAfter не указан ни флаг HWND_TOPMOST, ни флаг HWND_NOTOPMOST.
- Окно, определяемое hWnd, не является активным окном.
Самое верхнее окно больше не является верхним, если оно перемещается в нижнее (HWND_BOTTOM) порядка Z или после любого не самого верхнего окна. Когда самое верхнее окно не является верхним, его владельцы и принадлежащие ей окна также делаются не самыми верхними окнами.
Окно, отличное от верхнего, может принадлежать самому верхнему окну, но не наоборот. Любое окно (например, диалоговое окно), принадлежащее самому верхнему окну, само по себе делается верхним окном, чтобы все принадлежащие окна оставались выше владельца.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | 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-4 (появилось в Windows 10 версии 10.0.14393) |
См. также раздел
Основные понятия
Справочные материалы