Окна
и манипуляторы Теория
|
В данной статье я расскажу
вам об окнах и манипуляторах, потому что во
многих 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)