Окна и манипуляторы Теория

Окна

В данной статье я расскажу вам об окнах и манипуляторах, потому что во многих Api функциях требуется знание понятий окна и манипулятора окна.
Что же такое окно? Окно - это объект, занимающий прямоугольный участок экрана. Он может содержать другие окна, называемые дочерними.
Запомните
: всё, что находится на экране, представляет собой окно. Формы, элементы управления, кнопки, полосы прокрутки, текстовые поля - являются окнами.

Классы окон

Но возникает вопрос. Как такие разные объекты, как кнопки, формы и текстовые поля, могут быть окнами? Каким образом система различает их?
Дело в том, что каждое окно относится к какому-то классу:
Например кнопка относится к классу BUTTON, текстовое поле относится к классу EDIT, полоса прокрутки относится к классу SCROLLBAR и т.д.
Таким образом, система различает окна, определяя класс, к которому относится окно.

Манипуляторы окон

С помощью Api функций вы можете производить различные операции с окнами (Скрытие/показ окон, изменение заголовка(текста) окна, изменять различные атрибуты ), но для этого вам нужно понять, что такое манипулятор. Манипулятор это способ идентификации окна(и вообще любого объекта, но в данной статье рассматриваются только манипуляторы окон) в системе. У каждого окна в системе имеется манипулятор окна, который обычно обозначается сокращением hWnd. Visual Basic предоставляет возможность получить манипулятор окна, через его свойство hWnd.
Запомните: графические элементы, такие как label и image не являются окнами и поэтому не имеют манипулятора окна и следовательно с графическими элементами нельзя проводить различные операции используя Api функции.

Получение информации об окнах

Сейчас мы поговорим о том, как получить манипулятор окна с помощью Api функций:

Способ №1 Поиск окна по его заголовку

Это делается с помощью Api функции FindWindow:

'Объявляем функцию

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

'Процедура для получения манипулятора окна по его заголовку
Public Function GetHwnd(Caption As String) As Long
Dim hwnd As Long
hwnd = FindWindow(vbNullString, Caption)
'Caption - заголовок окна
GetHwnd = hwnd
End Function


Способ №2 Поиск окна по его классу

'Объявляем функцию


Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long


'Процедура для получения манипулятора окна по его классу
Public Function GetHwnd(Class As String) As Long
Dim hwnd As Long
hwnd = FindWindow(Class, vbNullString)

GetHwnd = hwnd
End Function

Способ №3 Способ поиск дочернего окна

'Функция для получения окна первого уровня

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

'Функция для получения дочернего окна

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

'Разместите на форме кнопку (Command1)

Private Sub Command1_Click()
Dim hwnd As Long
hwnd = FindWindow("Класс родителя", "Заголовок родителя") 'Поиск родителя
hwnd = FindWindowEx(hwnd, 0, "Класс дочернего окна", "Заголовок дочернего окна") 'Поиск дочернего окна
End Sub

 

Вот и всё, ваше начальное знакомство с окнами завершено, переходите к практике

Автор статьи: Хованский Ян (web: yansoft.by.ru)