Функция SetWindowPos

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

Синтаксис

BOOL SetWindowPos(

HWND hWnd,            // дескриптор окна
HWND
hWndInsertAfter, // дескриптор порядка размещения
int
x,                // позиция по горизонтали
int
y,                // позиция по вертикали
int
cx,               // ширина
int
cy,               // высота
UINT
uFlags           // флажки позиционирования окна

);

Параметры

hWnd

[in] Дескриптор окна.

hWndInsertAfter

[in] Дескриптор окна, которое предшествует установленному окну в Z-последовательности. Этот параметр должен быть дескриптор окна или одним из следующих значений:

Значение

Предназначение

HWND_BOTTOM

Помещает окно внизу Z-последовательности. Если параметр hWnd идентифицирует самое верхнее окно, окно теряет свой статус самого верхнего и помещается внизу всех других окон.

HWND_NOTOPMOST

Помещает окно перед всеми не самыми верхними окнами (то есть позади всех самых верхних окон). Этот флажок не имеет никакого влияния, если окно - уже не самое верхнее окно.

HWND_TOP

Помещает окно наверху Z-последовательности.

HWND_TOPMOST

Помещает окно перед не самыми верхними окнами. Окно сохраняет свою самую верхнюю позицию даже тогда, когда оно теряет активность.

 Для получения дополнительной информации о том, как использовать этот параметр, см. следующий раздел Замечания.

X

[in] Устанавливает новую позицию с левой стороны окна, в рабочих координатах.

Y

[in] Устанавливает новую позицию верхней части окна, в рабочих координатах.

cx

[in] Устанавливает новую ширину окна, в пикселях.

cy

[in] Устанавливает новую высоту окна, в пикселях.

uFlags

[in] Определяет флажки, устанавливающие размеры и позицию окна. Этот параметр может быть комбинацией следующих значений:

Значение

Предназначение

SWP_ASYNCWINDOWPOS

Если вызывающий поток и поток, который владеет окном, подключены к разным очередям ввода данных, система посылает запрос потоку, который владеет окном. Это не допускает блокирования работы вызывающего потока, в то время пока другие потоки обрабатывают запрос.

SWP_DEFERERASE

Препятствует созданию сообщения WM_SYNCPAINT.

SWP_DRAWFRAME

Выводит рамку (определенную в описании класса окна) вокруг окна.

SWP_FRAMECHANGED

Применяет новую установку стилей рамок, используя функцию SetWindowLong.

Отправляет сообщение 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 установлены, окно не может быть перемещено или изменен его размер.

Если Вы изменили некоторые данные окна, используя функцию SetWindowLong, Вы должны вызвать функцию SetWindowPos, чтобы получить ожидаемый результат отменены. Используйте нижеследующую комбинацию флажков для uFlags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED.

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

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

Прикладная программа не может активизировать неактивное окно без такого же переноса его в верхнюю часть Z-последовательности. Прикладные программы могут изменять позицию активного окна в Z-последовательности без ограничений, или они могут активизировать окно, а затем переместить его в верхнюю часть самых верхних или не самых верхних окон.

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

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

Если прикладная программа не в приоритетном режиме, а должна быть в нем, она должна вызвать функцию SetForegroundWindow.

Пример

Пример смотри в статье Инициализация диалогового окна.

Смотри также

Краткий обзор Окна, MoveWindow, SetActiveWindow, SetForegroundWindow

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

Windows. NET Server

Да

Windows XP

Да

Windows 2000

Да

Windows NT

Да

Windows Me

Да

Windows 98

Да

Windows 95

Да

Используемая библиотека

User32.lib

Заголовочный файл

 

- объявлено в

Winuser.h

- включено в

Windows.h

Unicode

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки
Перевод 12.04.2001 20:52 ©Copyright V. Sokovikov
Hosted by uCoz