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


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

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

[in] x

Тип: int

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

[in] y

Тип: int

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

[in] cx

Тип: int

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

[in] cy

Тип: int

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

[in] uFlags

Тип: UINT

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

Ценность Meaning
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.

Все координаты дочерних окон относятся к левому верхнему углу клиентской области родительского окна.

Окно можно сделать самым верхним окном, задав hWndInsertAfter флаг HWND_TOPMOST и убедив, что флаг SWP_NOZORDER не задан, или установив положение окна в порядке Z, чтобы оно было выше всех существующих верхних окон. Когда самое верхнее окно делается самым верхним, его собственные окна также делаются самыми верхними. Однако его владельцы не изменяются.

Если ни SWP_NOACTIVATE, ни флаг SWP_NOZORDER не указан (то есть, когда приложение запрашивает одновременное активацию окна и его положение в порядке Z), значение, указанное в hWndInsertAfter , используется только в следующих обстоятельствах:

  • Ни HWND_TOPMOST, ни флаг HWND_NOTOPMOST не указан в hWndInsertAfter.
  • Окно, определяемое hWnd , не является активным окном.
Приложение не может активировать неактивное окно, не доведя его до верхней части порядка Z. Приложение может изменить позицию активированного окна в порядке Z без ограничений или активировать окно, а затем переместить его в верхнюю или самую верхнюю часть окон.

Самое верхнее окно больше не является самым верхним, если оно переместится на нижний (HWND_BOTTOM) порядка Z или после любого самого верхнего окна. Когда самое верхнее окно не является самым верхним, его владельцы и собственные окна также делаются не самыми верхними окнами.

Самое верхнее окно может принадлежать самому верхнему окну, но не наоборот. Любое окно (например, диалоговое окно), принадлежащее самому верхнему окну, делается самым верхним окном, чтобы убедиться, что все принадлежащие им окна остаются над своим владельцем.

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Windows
Header winuser.h (включая Windows.h)
Library User32.lib
DLL User32.dll
Набор API ext-ms-win-ntuser-window-l1-1-4 (представлено в Windows 10 версии 10.0.14393)

См. также

BeginDeferWindowPos

Концептуальный

EndDeferWindowPos

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

ShowWindow

Виндоус