Win32 API. Функции окна
Страница 17. Функция DeferWindowPos


Функция DeferWindowPos

(ОтложеннаяПозицияОкна)

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

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

Параметры

hWinPosInfo
Идентифицирует размещающую множество окон структуру, которая содержит размеры и информацию о позиции для одного или большего количества окон. Эта структура возвращается функцией BeginDeferWindowPos или самым последним вызовом функции DeferWindowPos.

hWnd
Идентифицирует окно, для которого информация о модификации сохраняется в структуре.

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

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

Этот параметр игнорируется, если флажок SWP_NOZORDER установлен в параметре uFlags.

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

y
Устанавливает 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 - Показывает окно.

Возвращаемые значения
Возвращаемое значение идентифицирует модернизированную структуру расположения составного окна. Дескриптор, возвращенный этой функцией, может отличаться от дескриптора, переданного в функцию. Новый дескриптор, который эта функция возвращает должен быть передан в ходе следующего обращения к функции DeferWindowPos или EndDeferWindowPos. Если недостающие ресурсы системы доступны для функции, чтобы завершиться успешно, возвращаемое значение - ПУСТО (NULL).

Замечания
Если обращение к DeferWindowPos не выполняет задачу, прикладная программа должна отказаться от операции позиционирования окна и не вызывать EndDeferWindowPos. Если SWP_NOZORDER не установлен, Windows помещает окно, идентифицированное параметром hWnd в позиции после окна, идентифицированного параметром hWndInsertAfter. Если hWndInsertAfter - ПУСТО (NULL) или HWND_TOP, Windows помещает hWnd окна наверху Z-последовательности. Если hWndInsertAfter установлен в HWND_BOTTOM, Windows помещает 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-последовательности или после любого не самого верхнего окна. Когда самое верхнее окно сделано не самым верхним, его владельцы, и его находящиеся в собственности окна также делаются не самыми верхними окнами. Не самое верхнее окно может обладать самым верхним окном, но не наоборот. Любое окно (например, диалоговое окно), принадлежащее самому верхнему окну самостоятельно делается самым верхним окном, чтобы гарантировать, что все находящиеся в собственности окна становятся выше их владельца.

Смотри также
BeginDeferWindowPos, EndDeferWindowPos, ShowWindow

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

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

 
« Предыдущая статья   Следующая статья »