Win32 API. Функции окна - Функция SetWindowPos

ОГЛАВЛЕНИЕ

Функция SetWindowPos

(УстановитьПозициюОкна)

Функция SetWindowPos изменяет размер, позицию и Z-последовательность дочернего, выскакивающего или верхнего уровня окна. Дочерние, выскакивающие и верхнего уровня окна размещаются по порядку согласно их появлению на экране. Самое верхнее окно принимает самый высокий ранг и становится первым окном в Z-последовательности.

Синтаксис

BOOL SetWindowPos
(
HWND hWnd, // дескриптор окна
HWND hWndInsertAfter, // дескриптор порядка размещения
int X, // позиция по горизонтали
int Y, // позиция по вертикали
int cx, // ширина
int cy, // высота
UINT uFlags // флажки позиционирования окна
);

Параметры

hWnd
Идентифицирует окно.
hWndInsertAfter
Идентифицирует окно, которое предшествует установленному окну в Z-последовательности. Этот параметр должен быть дескриптор окна или одно из следующих значений:

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

Для получения дополнительной информации о том, как использовать этот параметр, см. следующий раздел Замечания.
X
Устанавливает новую позицию с левой стороны окна.
Y
Устанавливает новую позицию верхней части окна.
cx
Устанавливает новую ширину окна, в пикселях.
cy
Устанавливает новую высоту окна, в пикселях.
uFlags
Определяет флажки, устанавливающие размеры и позиционирование окна. Этот параметр может быть комбинацией следующих значений:

  • SWP_DRAWFRAME - Выводит рамку (определенную в описании класса окна) вокруг окна.
  • SWP_FRAMECHANGED - Посылает сообщение WM_NCCALCSIZE окну, даже тогда, когда размер окна не изменяется. Если этот флажок не установлен, WM_NCCALCSIZE посылается только тогда, когда размер окна изменяется.
  • SWP_HIDEWINDOW - Скрывает окно.
  • SWP_NOACTIVATE - Не активизирует окно. Если этот флажок не установлен, окно активизируется и перемещается в верхнюю часть или самой верхней, или не самой верхней группы (в зависимости от установки параметра hWndInsertAfter).
  • SWP_NOCOPYBITS - Сбрасывает все содержание рабочей области. Если этот флажок не установлен, допустимое содержание рабочей области сохраняется и копируется обратно в рабочую область после того, как окно установлено по размеру или переустановлено.
  • SWP_NOMOVE - Сохраняет текущую позицию (игнорирует X и Y параметры).
  • SWP_NOOWNERZORDER - Не изменяет позицию окна владельца в Z-последовательности.
  • SWP_NOREDRAW - Не перерисовывает изменения. Если этот флажок установлен, то не происходит никакой перерисовки любого вида. Это применяется к рабочей области, нерабочей области (включая строку заголовка и линейки прокрутки) и любую часть родительского окна, раскрытого в результате перемещения окна. Когда этот флажок установлен, прикладная программа должна явно лишить законной силы или перерисовывать любые части окна и родительского окна, которые требуют перерисовки.
  • SWP_NOREPOSITION - То же самое, что и флажок SWP_NOOWNERZORDER.
  • SWP_NOSENDCHANGING - Предохраняет окно от приема сообщения WM_WINDOWPOSCHANGING.
  • SWP_NOSIZE - Сохраняет текущий размер (игнорирует cx и cy параметры).
  • SWP_NOZORDER - Сохраняет текущую Z-последовательность (игнорирует параметр hWndInsertAfter).
  • SWP_SHOWWINDOW - Отображает окно.

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

Замечания
Если установлены флажки SWP_SHOWWINDOW или SWP_HIDEWINDOW, окно не может быть перемещено или изменен его размер. Все координаты для дочерних окон - рабочие координаты (относительно левого верхнего угла рабочей области родительского окна). Окно может быть сделано самым верхним окном или, путем установки параметра hWndInsertAfter в HWND_TOPMOST с гарантией того, что флажок SWP_NOZORDER не установлен, или, путем установки позиции окна в Z-последовательности так, чтобы оно было выше любого существующего самого верхнего окна. Когда не самое верхнее окно делается самым верхним, находящиеся в его собственности окна также делаются самыми верхними. Его владельцы, однако, не изменяются. Если ни флажок SWP_NOACTIVATE, ни флажок SWP_NOZORDER не установлен (то есть, когда прикладная программа потребовала, чтобы окно было одновременно, и активизировано, и чтобы его позиция изменилась в Z-последовательности), значение, заданное в hWndInsertAfter, используются только в следующих обстоятельствах:

  • Ни флажок HWND_TOPMOST ни флажок HWND_NOTOPMOST не установлен в hWndInser-tAfter.
  • Окно, идентифицированное hWnd - не активное окно.

Прикладная программа не может активизировать неактивное окно без такого же обеспечения ему в верхней части Z-последовательности. Прикладные программы могут изменять позицию активизированного окна в Z-последовательности без ограничений, или они могут активизировать окно, а затем переместить его в верхнюю часть самых верхних или не самых верхних окон. Если самое верхнее окно переустановлено в нижней части (HWND_BOTTOM) Z-последовательности или после любого не самого верхнего окна, оно больше не самое верхнее. Когда самое верхнее окно сделано не самым верхним, его владельцы и находящиеся в его собственности окна также делаются не самыми верхними окнами. Не самое верхнее окно может владеть самым верхним окном, а наоборот не может происходить. Любое окно (например, диалоговое окно) принадлежащее самому верхнему окну самостоятельно делается самым верхним окном, гарантируя, что все окна находящиеся во владении находятся выше их владельца. Если прикладная программа не в активном режиме, а должна быть в активном режиме, она должна вызвать функцию SetForegroundWindow.

Смотри также
MoveWindow, SetActiveWindow, SetForegroundWindow

Размещение и совместимость SetWindowPos

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется