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


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

Значение Значение
HWND_BOTTOM
((HWND)1)
Places окно в нижней части Z-заказа. Если параметр hWnd идентифицирует самое верхнее окно, оно теряет состояние верхнего уровня и помещается в нижнюю часть всех остальных окон.
HWND_NOTOPMOST
((HWND)-2)
Places окна над всеми не самыми верхними окнами (т. е. за всеми самыми верхними окнами). Этот флаг не действует, если окно уже является не самым верхним окном.
HWND_TOP
((HWND)0)
Places окно в верхней части Z-заказа.
HWND_TOPMOST
((HWND)-1)
Places над всеми окнами, не самыми верхними. Окно сохраняет самое верхнее положение, даже если оно деактивировано.

[in] x

Тип: int

Координата X верхнего левого угла окна.

[in] y

Тип: int

Координата Y верхнего левого угла окна.

[in] cx

Тип: int

Новая ширина окна в пикселях.

[in] cy

Тип: int

Новая высота окна в пикселях.

[in] uFlags

Тип: UINT

Сочетание следующих значений, влияющих на размер и положение окна.

Значение Значение
SWP_DRAWFRAME
0x0020
Рисует рамку (определенную в описании класса окна) вокруг окна.
SWP_FRAMECHANGED
0x0020
Отправляет WM_NCCALCSIZE сообщение в окно, даже если размер окна не изменяется. Если этот флаг не указан, WM_NCCALCSIZE отправляется только при изменении размера окна.
SWP_HIDEWINDOW
0x0080
Скрывает окно.
SWP_NOACTIVATE
0x0010
Не активирует окно. Если этот флаг не задан, окно активируется и перемещается в верхнюю часть самой верхней или самой верхней группы (в зависимости от параметра hWndInsertAfter ).
SWP_NOCOPYBITS
0x0100
Удаляет все содержимое клиентской области. Если этот флаг не указан, допустимое содержимое клиентской области сохраняется и копируется обратно в клиентную область после изменения размера окна.
SWP_NOMOVE
0x0002
Сохраняет текущую позицию (игнорирует параметры x и y ).
SWP_NOOWNERZORDER
0x0200
Не изменяет положение окна владельца в порядке Z.
SWP_NOREDRAW
0x0008
Не перерисовывает изменения. Если этот флаг установлен, перерисовка не выполняется. Это относится к клиентской области, неклиентской области (включая заголовок и полосы прокрутки) и любой части родительского окна, обнаруженной в результате перемещения окна. Если этот флаг установлен, приложение должно явно сделать недействительными или перерисовывать все части окна и родительского окна, которые требуют перерисовки.
SWP_NOREPOSITION
0x0200
То же, что и флаг SWP_NOOWNERZORDER .
SWP_NOSENDCHANGING
0x0400
Запрещает окно получать сообщение WM_WINDOWPOSCHANGING .
SWP_NOSIZE
0x0001
Сохраняет текущий размер (игнорирует параметры cx и cy ).
SWP_NOZORDER
0x0004
Сохраняет текущий порядок Z (игнорирует параметр hWndInsertAfter ).
SWP_SHOWWINDOW
0x0040
Отображает окно .

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

Тип: 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, не является активным окном.
Приложение не может активировать неактивное окно, не доведя его до верхней части порядка Z. Приложение может изменить положение активированного окна в порядке Z без ограничений или активировать окно, а затем переместить его в верхнюю или не верхнюю часть окон.

Самое верхнее окно больше не является верхним, если оно перемещается в нижнее (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)

См. также раздел

BeginDeferWindowPos

Основные понятия

EndDeferWindowPos

Справочные материалы

Showwindow

Windows