Листинг 16.6. Пример make-файла для создания приложения
<1> NAME =
<2> OBJ5 =
<3> DEF =
<4>
<5>
<6>
<7>
$(OBJS) $(DEF)
<8>
/Tpe /aa /c
$(OBJS), $(NAME), , $(IMPORT), $(DEF)
<9>
<10>
, ,
Поясним наиболее значимые элементы приведенного файла. Мы уже упоми-
нали, что трансляция исходного файла производится программой tasm32.exe. При
404 Глава
Создание Windows-приложений на ассемблере
вызове ей передается ряд ключей (строки 1-6). Для формирования отладочной
информации вы можете указывать значения макрооператоров
(стро-
ка 4) и LINKDEBUG = /v (строка 5). Кроме этих необязательных ключей в строке 10
присутствует обязательный ключ
который требует, чтобы транслятор ассемб-
лера различал строчные и прописные буквы в идентификаторах программы. Как
вы смогли убедиться, это очень удобно при написании программ для Windows. Стро-
ка 8 содержит вызов компоновщика
Описания других ключей для этой
программы приведены в главе 6 и приложении В (http://www.piter.com/download).
При запуске программы make.exe не забывайте о нехитром, но полезном приеме
с перенаправлением вывода экранных сообщений в файл с помощью символа
M A K E . E X E -DDEBUG > р
В файле р текущего каталога читайте диагностические сообщения о процессе
построения приложения.
Углубленное программирование
на ассемблере для Win32
Реализация описанного ранее процесса разработки простого Windows-приложе-
ния на языке ассемблера может отнять довольно много сил и времени у неподго-
товленного человека.
скорее всего, это не будет пустой тратой драгоценных
для любого программиста жизненных сил. Цель материала, изложенного именно
в таком виде, — демонстрация того, что разработка Windows-приложения на языке
ассемблера — не такое уж нереальное дело. Напротив, у него даже есть свои досто-
инства. Нужно отметить, что объем учебного материала, необходимого для описа-
ния процесса разработки каркасного приложения для Windows, не зависит от язы-
ка, на котором предполагается вести программирование, так как основное внимание
уделяется не столько средствам языка, сколько описанию требований к функцио-
нированию приложения со стороны Windows. Каркасное приложение является
программой для Windows, которая в лучшем случае выводит строку
текста в окно приложения. С точки зрения сложности, не имеет смысла даже про-
водить ее сравнение с аналогичной программой для MS-DOS, выводящей строку
на экран. Логику работы и способы реализации такой программы для MS-DOS
в худшем случае можно объяснить минут за десять. Для объяснения логики рабо-
ты каркасного Windows-приложения неподготовленному слушателю
про-
читать целую лекцию, может быть, и не одну. И это простейшая программа. А где
же предел? Какими минимальными знаниями и умениями должен обладать
граммист, чтобы утверждать, что он является, если, конечно, можно так выразить-
ся, профессиональным Windows-программистом. Не претендуя на безусловную
попытаемся перечислить некоторые проблемы, которые программист дол-
жен научиться
в первую очередь.
Нужно понять общие принципы построения программы, работа которой управ-
ляется сообщениями.
II Нужно научиться выводить текст и графику в область окна приложения. Ос-
новная проблема здесь состоит в умении эффективно использовать
Углубленное программирование на ассемблере для Win32 405
ность средств Win32 API. Сам процесс формирования изображения в окне
Windows напоминает процесс формирования изображения в видеобуфере, как
это делалось в MS-DOS. Оба эти варианта вывода изображения можно срав-
нить с рисованием цветными мелками на школьной доске. Для того чтобы об-
новить содержимое окна, его необходимо либо полностью вывести заново, либо
сначала удалить ненужные фрагменты, сформировать на их месте новые и за-
тем вывести в определенное место в окне. Эта проблема называется проблемой
перерисовки изображения, и она тесно связана с тем, насколько эффективно ре-
шается следующая проблема.
Нужно организовать адекватную обработку сообщений. Эффективность и пра-
вильность работы программы напрямую зависит от того, насколько правильно
в ней организована обработка сообщений. В самом начале процесса обучения
написанию программ для Windows вы столкнетесь с необходимостью обработ-
ки такого сообщения, как WM_PAINT. Проблема здесь заключается в том, что
Windows не сохраняет содержимое окна или части окна при его свертывании
или скрытии под другим окном. Следить за содержимым своих окон должно
само приложение, а точнее, соответствующая оконная функция. Более подроб-
но о решении этой проблемы мы узнаем при рассмотрении вопроса перерисов-
ки изображения.
Нужно научиться создавать интерфейсную часть приложения. Интерфейс при-
ложения — это его визитная карточка. Первым, на что обращает внимание
пользователь, тем более если он непрофессионал, является именно этот эле-
мент работы приложения. Более того, движущей силой развития самой систе-
мы Windows является стремление к реализации идеи идеального интерфейса.
На сегодняшний день эту роль играет оконный интерфейс. Что будет завтра,
пока не ясно, так как оконный интерфейс действительно решает многие про-
блемы и до исчерпания его потребительского ресурса, наверное, еще далеко.
Основа оконного интерфейса — окно, в котором имеются две области: управ-
ляющая, с ее помощью осуществляется управление работой окна, и пользо-
вательская, которая обычно занимает большую часть окна, и именно в ней
пользователь формирует некоторое изображение. Управляющая область
окна приложения состоит из более элементарных интерфейсных компонентов:
меню, окон диалога, кнопок, панелей и т. д. Создание и организация работы со
многими из этих компонентов поддерживается Windows с помощью функций
Win32 API.
Нужно научиться обрабатывать пользовательский ввод.
Каждый пункт этого списка представляет лишь вершину некоторой иерархии
более частных проблем и может быть довольно глубоко детализирован вглубь. Ко-
в рамках нашего изложения сделать это не представляется возможным, да
и вряд ли нужно. Подобные вопросы хорошо изложены в литературе. Материал
данной главы подобран так, чтобы показать, как отражается на процессе разработ-
ки Windows-приложения выбор ассемблера в качестве основного языка програм-
мирования. Поэтому основное внимание мы уделяем не тому, как реализовать те
или иные элементы пользовательского интерфейса, а технологии сборки
406 Глава
Создание Windows-приложений на ассемблере
способного приложения с помощью пакета TASM (для
отличие только в
инструментарии). Исходя из этого далее покажем, как использовать ресурсы в
Windows-приложениях, написанных на ассемблере.
10>9>8>7>6>5>4>3>2>1> Do'stlaringiz bilan baham: |