В
первом номере журнала вы уже познакомились с понятиями окно и манипулятор
окна. Напоминаю: окно - это объект, занимающий
прямоугольный участок экрана. Он может содержать другие окна, называемые
дочерними. Манипулятор окна это способ идентификации
окна в системе.
В этой статье мы продолжим изучать окна и их свойства.
Координаты
и размеры окна
В
данной статье вы узнаете, с помощью каких Api функций можно получить или
поменять координаты и размер окна:
1.
Получаем координаты и размер окна:
'Функция
для получения координат и размера окна
Private Declare Function GetWindowPlacement Lib "user32" (ByVal
hwnd As Long, lpwndpl As WINDOWPLACEMENT) As Long
'Необходимые
структуры
Private
Type POINTAPI
x As Long
y As Long
End Type
Private
Type RECT
Left As Long 'Координата X верхнего левого угла
Top As Long 'Координата Y верхнего левого угла
Right As Long 'Координата X нижнего правого угла
Bottom As Long 'Координата Y нижнего правого угла
End Type
Private
Type WINDOWPLACEMENT
Length As Long
flags As Long
showCmd As Long
ptMinPosition As POINTAPI 'Координаты окна в свёрнутом
состоянии
ptMaxPosition As POINTAPI 'Координаты окна в развёрнутом
состоянии
rcNormalPosition As RECT 'Координаты окна в нормальном
состоянии
End Type
Использование:
Dim ord As WINDOWPLACEMENT
GetWindowPlacement Me.hwnd, ord
MsgBox "Form.Left = " & ord.rcNormalPosition.Left &
" Form.Top = " & ord.rcNormalPosition.Top
'ord.rcNormalPosition.Left и ord.rcNormalPosition.Top
описывают местонахождение верхнево левого угла окна.
В
данном примере выдаётся диалоговое окно о текущем положении формы. Выдаётся
оно в пикселях, чтобы это справить и перевести в твипы, нужно
ord.rcNormalPosition.Left и ord.rcNormalPosition.Top, в данном примере
умножить на 15 (Твип равен 1/15 пикселя). Вот так:
MsgBox
"Form.Left = " & ord.rcNormalPosition.Left * 15 & "
Form.Top = " & ord.rcNormalPosition.Top * 15
Теперь
мы увидим координаты формы в пикселях.
Размеры окна можно рассчитать так:
Dim
vHeight, vWidth
vHeight
= (ord.rcNormalPosition.Bottom - ord.rcNormalPosition.Top) * 15 'Высота
- Height
vWidth = (ord.rcNormalPosition.Right - ord.rcNormalPosition.Left ) * 15
'Ширина - Width
Таким
образом, мы можем определить координаты и размеры любого окна в системе.
2. Меняем координаты и размер окна:
'Функция
для изменения координат и размера окна
Private
Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long,
ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal
cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'Необходимые константы
Const SWP_NOSIZE = &H1 'Сохранить текущие размеры
Const SWP_NOMOVE = &H2 'Сохранить текущее положение
Использование:
1.
Изменяем координаты окна
SetWindowPos
Me.hwnd, 0, 100, 200, 0, 0, SWP_NOSIZE 'Меняем координаты
формы на (100, 200)
2.
Изменяем размеры окна
SetWindowPos
Me.hwnd, 0, 0, 0, 233, 345 , SWP_NOSIZE 'Меняем
координаты размеры формы на Width = 233, Height = 345
3. Изменяем размеры и координаты окна
SetWindowPos
Me.hwnd, 0, 100, 200, 233, 345 , 0
Теперь вы можете изменять размеры и координаты любого окна в системе.