Функции перемещения окон

Для перемещения и изменения размеров окна hwnd вызывают функцию MoveWindow. Ей передают новые координаты окна.
Функция MoveWindow объявлена следующим образом:

1
2
3
4
5
6
7
BOOL MoveWindow( HWND hwnd,
int	x,		//новая координата левого края окна
int	у,		//новая координата верхнего края окна
int	nWidth,		//новая ширина окна
int	nHeight,	//новая высота окна
BOOL	bRepaint	//флажок перекрашивания окна
);

Если bRepaint = TRUE, немедленно после перемещения перерисовываются те части экрана, на которых отразилось перемещение окна. Иначе окно перерисовывает себя только после обработки всех поступивших к моменту перемещения сообщений. При успешном выполнении функция возвращает ненулевое значение, иначе — NULL.


Функция SetWindowPos изменяет координаты окна hwnd на экране и его расположение по отношению к другим окнам:

1
2
3
4
5
6
7
8
BOOL SetWindowPos( HWND hwnd,
HWND	hWndlnsertAfter,	//дескриптор порядка размещения
int	х,			//новая координата левого края
int	у,			//новая координата верхнего края
int	сх,			//новая ширина
int	су,			//новая высота
UINT	uFlags			//флажок позиционирования
);

В случае успешного выполнения она возвращает ненулевое значение. Параметр hWndlnsertAfter может быть дескриптором предшествующего окна или равным одному из следующих значений:

Значение Пояснение
HWND_BOTTOM Помещает окно ниже других окон
HWND_NOTOPMOST Помещает временное или дочернее окно выше временных и дочерних, но ниже перекрывающихся окон
HWND_TOP Помещает окно выше всех окон
HWND_TOPMOST То же, что HWND_NOTOPMOST, но окно сохраняет позицию после потери активности

Параметр uFlags может быть комбинацией значений из нижеследующей таблицы:

Значение Пояснение
SWP_DRAWFRAME Вокруг окна рисовать заданную в классе окна рамку
SWP_FRAMECHANGED Функции окна посылать сообщение об изменении размеров, даже если размер окна не изменяется
SWP_HIDEWINDOW Скрыть окно
SWP_NOACTIVATE Отменить активность окна
SWP_NOCOPYBITS Стереть содержимое рабочей области
SWP_NOMOVE Сохранить текущую позицию
SWP_NOOWNERZORDER или SWP_NOREPOSITION Не изменять расположение окна относительно других окон
SWP_NOREDRAW Не перерисовывать содержимое окна
SWP_NOSENDCHANGING Не сообщать об изменении позиции
SWP_NOSIZE Сохранить текущий размер
SWP_NOZORDER Не менять расположение
SWP_SHOWWINDOW Показать окно

При одновременной работе нескольких приложений одно из них можно вывести на передний план и передать его окну фокус ввода.
Для этих целей используют функцию SetForegroundWindow. Она помещает поток, который создал заданное окно, на передний план и активизирует это окно. Синтаксис этой функции:

1
BOOL SetForegroundWindow (HWND hwnd );

В случае успешного перемещения функция возвращает ненулевое значение, иначе — NULL.
Для перемещения окна важно знать системные метрики экрана и окна. Их получают с помощью функции GetSystemMetrics. Она возвращает метрики и текущие установки конфигурации системы. Метрики системы — это габариты (ширина и высота) отображаемых элементов Windows. Все габариты возвращаются в пикселях.
Функция GetSystemMetrics объявлена следующим образом:

1
int GetSystemMetrics (int nlndex);

Параметр nlndex указывает на возвращаемую метрику системы или установку конфигурации. Ниже приводится таблица некоторых имен для этого параметра:

Имя Возвращаемая характеристика
SM_CXMIN Минимальная ширина окна
SM_CYMIN Минимальная высота окна
SM_CXSCREEN Ширина экрана
SM_CYSCREEN Высота экрана
SM_CYCAPTION Высота заголовка
SM_CYMENU Высота полосы меню

Например, следующий оператор определяет ширину экрана:

1
int w=GetSystemMetrics(SM_CXSCREEN);

Следующая функция позволяет получить координаты обрамляющего окно hwnd прямоугольника:

1
BOOL GetWindowRect( HWND hwnd, LPRECT IpRect);

Параметр IpRect указывает на структуру типа

1
2
3
4
5
6
RECT: typedef struct {
	LONG left;	//левый край
	LONG top;	//верхний край
	LONG right;	//правый край
	LONG bottom;	//нижний край
} RECT;

Координаты прямоугольника отсчитываются от левого верхнего угла экрана в пикселях. В случае успешного выполнения функция возвращает ненулевое значение. Следующий фрагмент демонстрирует получение экранных координат прямоугольника окна:

1
2
RECT rc;
GetWindowRect(hwnd, &);

Функция GetClientRect возвращает координаты прямоугольника, обрамляющего рабочую область окна:

1
BOOL GetCIientRectf HWND hwnd, LPRECT IpRect);

При этом прямоугольник смещен в левый верхний угол экрана. То есть rc.left=rc.top=0, а значения полей right и bottom равны соответственно ширине и высоте рабочей области.

Оставить комментарий


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>