Шаг 15 - Обзор WinAPI

Раз уж мы в прошлом шаге воспользовались функцией WinAPI, то нужно немного о WinAPI узнать. WinAPI - это прикладной интерфейс взаимодействия с программой. Он включает в себя стандартизованные классы, возможности связи (messaging) между приложениями, функции OLE и многое другое. Практически, все классы VCL используют WinAPI, например, кнопка TButton произведена от простого класса WinAPI BUTTON. Однако использовать только WinAPI нерационально. Поэтому были созданы библиотеки стандартных компонентов, в частности VCL, MFC, OWL. Наиболее, так скажем, "машинно-независимой" из них является, безусловно, VCL Однако все же иногда возникает нужда обратится к этим функциям, поскольку все библиотеки не полностью инкапсулируют функции Windows.

Как известно, Windows - среда, управляемая событиями. События бывают разных типов - пользовательские (нажатие на клавиатуру, движение мыши), аппаратные (поступление данных от модема, сбой в работе принтера), программные (завершение обработки операции) и прочие. Четкого разделения не существует. Наиболее близкий аналог событий Windows в технике - прерывания процессора. Когда возникают события, операционка перенаправляет их программе, которая может обработать или не обрабатывать их.

С этим связан еще и такой важный момент, как разделение процессорных ресурсов. В отличие от DOS-программ, которые обычно замыкали бесконечный цикл в ожидании нажатий на клавиатуру или чего-то еще, Windows-программы лишь обрабатываеют события, а затем переходят в режим ожидания (Idle), при котором ресурсы не расходуются.

Также нужно объяснить понятие Handle. Я уже довольно много раз им пользовался, применяя различные переводы. Правильнее всего будет сказать, что это оконный дескриптор объекта. Дело в том, что для WinAPI аргументом является не указатель на объект, а его оконный дескриптор. называемый также HWND. В Windows окнами считаются не только окна-формы, но и объекты такие, как кнопка, панель, меню. В иерархии VCL эти классы - производные TWinControl. Кстати, увидеть иерархию можно, нажав в Help'е кнопку Hierarchy сверху.

Надо отдать должное, функции WinAPI очень разнообразны. Кто обращал внимание, справка C++Builder, появляющаяся по F1, не дает по ним сведений. Для того, чтобы открыть справку, нужно воспользоваться help-файлами MS SDK. В меню Пуск, там же, где и Builder, есть подраздел Help, а в нем MS SDK help files представлены по категориям. Но удобнее, естественн, вести поиск сразу во всей базе. Для этого неплохо бы создать ярлык на файл "Program Files\Common Files\Borland Shared\MSHelp\win32sdk.hlp", который содержит все разделы справки MS SDK.

Правда, оговорюся, что справка не очень структурирована, и порой с чем-то разобраться с помощью нее бывает довольно сложно. Но в принципе кое с в чем помочь она может.

Основные инструменты WinAPI - это функции и сообщения (messages). Если с первыми более менее понятно, поскольку их не так много, то вторых очень большое количество, причем с первого взгляда они выполняют одинаковые функции. Но тут есть один момент. В названии сообщения первые буквы перед "_" определяют, к какому типу объектов оно может посылаться. Например, WM означает Window Message, то есть сообщение, отправляемое окну-форме. EM - Edit control Message, отправляемые объектам типа TMemo, SBM - Scroll Bar Message, отправляется полосам прокрутки. В принципе в справке это указывается.

Для отправления сообщений испоьзуются функции SendMessage и PostMessage. Для приема чаще всего используются таблицы MESSAGE_MAP. И то, и другое будет рассмотрено в следующем Шаге.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Аванесов Самвел - 5.11.2001