Ассемблерное программирование в Windows

15.09.2004
Новиков Максим Глебович.

Глава 3. Подготовка к написанию второй программы

Предыдущую программу можно рассматривать, как одну из самых простых в среде Windows, но не являющуюся типичной для неё. Настоящие приложения имеют несколько более сложную структуру. Скоро мы напишем и исследуем типичное Windows-приложение, но до этого давайте в общих чертах, не вдаваясь в подробности, рассмотрим несколько основных моментов Windows-программирования, которые помогут нам в дальнейшем понять нашу будущую программу. Не пытайтесь в этой главе понять сразу всё. Это довольно сложный материал, и он будет полностью понятен только после исследования кода нашей программы, которую мы вскоре напишем. Схватите лишь общий смысл.

Windows-приложение под микроскопом.

Физически код windows-приложения состоит из постоянного вызова функций, уже имеющихся в самой операционной системе (так же, как при программировании в DOS мы вызывали прерывания). Эти функции называются функциями API (Application Program Interface — Прикладной Программный Интерфейс). Функций API насчитывается более двух тысяч. Они располагаются в каталоге «WINDOWS/System 32» в файлах с расширением «dll» (Dynamic Link Library — Динамически Компонуемая Библиотека).

Логически windows-приложение имеет строго определённую конструкцию, рассчитанную на постоянную циклическую обработку специальных кодов (сообщений), которые поступают в приложение при различных событиях, таких, как нажатие клавиш клавиатуры, изменение размеров окна приложения и т.п. Все сообщения поступают на обработку в специальную область приложения — оконную процедуру, являющуюся основной частью приложения.

Визуально windows-приложение состоит из отдельных объектов — визуально и программно законченных элементов приложения (окна, кнопки, меню, поля ввода и т.п.), каждый из которых имеет свой программный код и область данных со своими параметрами, такими, как высота, ширина и т.п.. Главным объектом, содержащим в себе все остальные объекты, является основное окно приложения. Написание любого приложения начинается именно с создания основного окна приложения.

Схема работы программы (логический уровень).

Программа в Windows основана на постоянной обработке сообщений и имеет следующую структуру:

При запуске программы, Windows автоматически создает для нее персональную очередь для управляющих сообщений. Далее, приложение создает себе основное окно, к которому привязывает написанную нами оконную процедуру, распознающую сообщения от клавиатуры, мыши и т.п. и реагирующую на них так, как нам это будет нужно. Далее программа входит в цикл, во время которого она забирает очередное сообщение от клавиатуры, мыши и т.п. из очереди сообщений и передает в нашу оконную процедуру. Там сообщение распознается, следует реакция на него, а затем оконная процедура возвращает управление в цикл обработки сообщений.

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

Создание структур и объектов.

Структуры. Программирование в Windows тесно связано с особым видом переменных — структурами. Структура — это сложная переменная, состоящая из нескольких переменных разных типов, таких как, например, db, dw или dd. В зависимости от количества и типов входящих в структуру переменных она сама будет иметь свой уникальный тип. Этот тип перед её использованием надо описать, т.е. создать некий шаблон структуры (как-бы создать новый тип переменной, пока неизвестный ассемблеру), после чего можно создать любое число структур этого типа так же, как мы создаем любое число переменных типа db , dw или dd .

Объекты. Объект создаётся подобно структуре и имеет логически похожий смысл. Только если перед созданием структуры надо описать её тип, то перед созданием объекта необходимо описать его класс (содержащий процедуры и параметры будущего объекта). Класс — это фактически тип, только не переменной, как в случае со структурой, а объекта. Затем по классу, как по шаблону, создается уже непосредственно объект. По одному классу можно создавать любое число объектов, т.е. всё аналогично созданию структуры.

Создание основного окна приложения.

Основное окно создается (как и все другие объекты) на основе своего класса . Базовый класс окна уже имеется в Windows, его необходимо лишь слегка дополнить, для чего на основе базового класса окна необходимо создать новый класс.

Для создания нового класса основного окна на основе базового нужно в программе описать специальную структуру, создать её, и заполнив её данными об окне и вызвать специальную функцию с передачей ей адреса созданной структуры. После этого класс будет зарегистрирован, и им можно будет пользоваться для создания окна, как шаблоном.

Чтобы создать окно по классу, надо вызывать другую специальную функцию, в которую среди прочих параметров передать указатель на созданный класс. Всё это мы подробнее рассмотрим позднее.

Файловая структура проекта.

Исходные тексты приложения обычно содержатся в нескольких файлах, объединенных в общий проект. Файлы в проекте могут быть нескольких типов, различающихся расширением (формат у всех файлов текстовый):

rap — файл с данными о проекте, генерируемый средой RadASM. Файл содержит информацию обо всех файлах проекта. В разных средах программирования файл проекта может иметь разное расширение. Если вы программируете вне среды в обычном текстовом редакторе, и вручную вызываете компилятор, то этот файл у вас будет отсутствовать.
asm — главный исходный текст приложения, создаваемый программистом.
inc — описания классов, структур и данных, объявление внешних процедур и функций, присвоение имен константам. Другими словами, всё, что не вошло в файл .asm. Существуют стандартные .inc-файлы, которые имеются в составе пакета ассемблера, и которые можно использовать.
rc — ресурсы приложения (тексты меню, описания диалоговых окон и т.п.)

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

[Вернуться в начало]
Глава 1–2
Глава 4 [Оставить отзыв в гостевой]
Hosted by uCoz