Функция DeferWindowPos


Функция DeferWindowPos модифицирует структуру, определяющую позицию множества окон в заданном окне. Затем функция возвращает дескриптор модифицированной структуры. Функция EndDeferWindowPos использует информацию в этой структуре, чтобы изменить позицию и размер ряда окон одновременно. Функция BeginDeferWindowPos создает структуру.

Синтаксис

HDWP DeferWindowPos(

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

);

Параметры

hWinPosInfo

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

hWnd

[in] Дескриптор окна, для которого информация о модификации сохраняется в структуре. Все окна в структуре многооконного позиционирования должны иметь одного и того же родителя.

hWndInsertAfter

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

Значение

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

HWND_BOTTOM

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

HWND_NOTOPMOST

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

HWND_TOP

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

HWND_TOPMOST

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

x

[in] Устанавливает x-координату левого верхнего угла окна.

y

[in] Устанавливает y-координату левого верхнего угла окна.

cx

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

cy

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

uFlags

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

 

Значение

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

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

Показывает окно.

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

Возвращаемое значение идентифицирует модернизированную структуру многооконного позиционирования. Дескриптор, возвращенный этой функцией, может отличаться от дескриптора, переданного в функцию. Новый дескриптор, который эта функция возвращает должен быть передан в ходе следующего вызова функции 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, используются только в следующих обстоятельствах:

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

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

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

Смотри также

Краткий обзор Окна, BeginDeferWindowPos, EndDeferWindowPos, ShowWindow

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

Windows. NET Server

Да

Windows XP

Да

Windows 2000

Да

Windows NT

Да

Windows Me

Да

Windows 98

Да

Windows 95

Да

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

User32.lib

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

 

- объявлено в

Winuser.h

- включено в

Windows.h

Unicode

Нет

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

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz