Программирование для IBM OS/2© Александр Фролов, Григорий ФроловТом 4, М.: Диалог-МИФИ, 1993, 286 стр. 2.2. Изменение размеров и расположения окнаС помощью функции WinSetWindowPos приложение может изменить расположение или размеры созданного ранее окна. Прототип этой функции приведен ниже: BOOL WinSetWindowPos ( HWND hwnd, // идентификатор окна HWND hwndInsertBehind,// относительный // порядок расположения LONG x, // координата по оси X LONG y, // координата по оси Y LONG cx, // ширина окна LONG cy, // высота окна ULONG fl); // индикатор изменения позиции Через параметр hwnd функции передается идентификатор окна, размеры или расположение которого будут изменяться. Параметр hwndInsertBehind задает новое расположение окна по оси Z (если в параметре fl, описанном ниже, указан флаг SWP _ZORDER ). Сделаем пояснение относительно оси Z . Ось Z направлена перпендикулярно к плоскости экрана в направлении от экрана к глазам пользователя. Если на экране отображается несколько перекрывающих друг друга окон, можно считать, что все эти окна имеют разные координаты вдоль оси Z. Так как экран плоский, пользователь видит не объемное изображение, а плоскую проекцию этих окон на поверхность экрана. При этом некоторые окна могут полностью или частично закрывать другие. С помощью функции WinSetWindowPos приложение может выдвигать некоторые окна на передний план или наоборот, отодвигать на задний. Для этого в качестве значения для параметра hwndInsertBehind следует указывать константы HWND_TOP и HWND_BOTTOM , соответственно. Что касается параметров x и y, то они задают новые значения для координат дочернего окна по соответствующим координатным осям, связанным с родительским окном (если в параметре fl указан флаг SWP _MOVE ). По умолчанию начало системы координат находится в левом нижнем углу окна, ось X направлена слева направо, а ось Y - снизу вверх. В качестве единицы измерения, опять же по умолчанию, используется пиксел - минимальный элемент изображения при выбранном видеорежиме. Параметры cx и cy задают, соответственно, новые значения для ширины и высоты окна в пикселах (если в параметре fl указан флаг SWP _SIZE ). Параметр fl указывается как набор флагов,
объединенных при помощи логической операции ИЛИ.
Он определяет, какие операции выполняет функция
WinSetWindowPos . Ниже мы привели возможные значения
флагов с кратким описанием.
Если функция WinSetWindowPos завершилась успешно, она возвращает значение TRUE, при ошибке - FALSE. Заметим, что если не указан флаг SWP _NOADJUST, в функцию окна перед выполнением перемещения или изменения размеров передается сообщение WM_ADJUSTWINDOWPOS . Первый параметр этого сообщения содержит указатель на структуру типа SWP, показанную ниже: typedef struct _SWP { ULONG fl; LONG cy; LONG cx; LONG y; LONG x; HWND hwndInsertBehind; HWND hwnd; ULONG ulReserved1; // зарезервировано ULONG ulReserved2; // зарезервировано } SWP ; typedef SWP *PSWP; Обработчик сообщения может изменить поля x, y, cx, cy или hwndInsertBehind, внеся коррективы в изменения размеров или расположения окна. |