Borland Pascal. Руководство пользователя

         

Абстрагирование функций Windows


Приложения Windows управляют своим видом и поведением путем вызова функций Windows - набора почти из 600 функций, образующий интерфейс с прикладной программой Windows (API). Каждая функция воспринимает разнообразные параметры различных типов, которые мо- гут быть достаточно запутанными. Хотя из Borland Pascal вы можете непосредственно вызывать любую функцию Windows, ObjectWindows уп- рощает задачу, предлагая объектные методы, абстрагирующие функци- ональные вызовы.

Как отмечалось выше, многие из параметров для функций Windows уже записаны в полях интерфейсных объектов. Таким обра- зом, методы могут использовать эти данные для подстановки пара- метров для функций Windows. Кроме того, ObjectWindows группирует родственные функциональные вызовы в отдельных методах, которые выполняют задачи более высокого уровня. Результатом является уп- рощенный и простой в использовании интерфейс API, улучшающий су- ществующий API Windows.

Хотя такой подход существенно уменьшает вашу зависимость от сотен функций API Windows, он не запрещает вам вызывать API не- посредственно. ObjectWindows предлагает лучшее из обоих "миров": объектно-ориентированную разработку высокого уровня, плюс макси- мальное управление графической операционной средой.



Архитектура с управлением по событиям


Windows основана на архитектуре с управлением по событиям. Это означает, что весь ввод от пользователя интерпретируется как события. Когда событием является щелчок кнопкой "мыши" или нажа- тие клавиши клавиатуры, то происходит событие, и Windows генери- рует сообщение. Например, если пользователь щелкает левой кнопкой "мыши", Windows генерирует сообщение wm_LButtonDown. Если пользо- ватель нажимает клавишу, Windows генерирует событие wm_KeyDown.

При выборе "мышью" или с помощью клавиатуры Windows интерп- ретирует все команды меню и управляющие команды как сообщения wm_Command. Эта архитектура с управлением по событиям отлично со- гласуется с объектно-ориентированным подходом Borland Pascal.



Автоматизация ответа на сообщения


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

Объекты с их предопределенным поведением (методами) прекрас- но подходят для задачи ответа на внешние воздействия (сообщения Windows). ObjectWindows превращает сообщения Windows в вызовы ме- тодов Borland Pascal. Таким образом, с помощью ObjectWindows вы просто определяете метод для ответа на каждое сообщение, которое вам нужно обрабатывать в программе. Например, когда пользователь щелкает левой кнопкой "мыши", Windows генерирует сообщение wm_LButtonDown. Если вы хотите, чтобы окно или управляющий эле- мент в вашей программе реагировали на такие нажатия кнопки "мы- ши", нужно определить метод WMLButtonDown, настроенный на сообще- ние wm_LButtonDown. Затем, когда Windows посылает это сообщение, ваш объект автоматически вызывает определенный вами метод.

Такие методы называются методами ответа на сообщение. Без объектно-ориентированного программирования и ObjectWindows вам пришлось бы написать длинный оператор case для каждого окна и уп- равлять поступлением этого сообщения, отсортировывать вид сообще- ния и наконец, решать, что с ним делать. ObjectWindows берет на себя все эти функции.



Буфер вырезанного изображения


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



Что такое приложение Windows?




На Рис. 10.1 показаны основные компоненты приложения Windows. Чтобы понять обсуждаемые темы, вам должны быть знакомы эти компоненты, и вы должны уметь с ними работать.

Кнопка минимизации Кнопка максимизации | Строка заголовка | | Командная кнопка | | | управления меню Строка меню | Вертикальная полоса | | | | | прокрутки | | | mm|mmmmmmmmmmmmmmmm|mmmmmmmmmmmm|mmmmmmmmmmmmm|mmmmmmmmmmmm|m|mm X+|[]=============|============|=============|============|=|+X X|#=# | Borland Pascal | |^|v|X X|-----------------|--------------------------|-----------+-+-|X X| File Edit Search Run Compile Tools Options |indows Help |X X|--------------------------------------------|---------------|X X|+===========================================|+ |X X#=# c:\bpw\helloapp.pas |^| |X X----------------------------------------+-+ |X X program Hello; ^| |X X #| |X X uses WObjects, WinTypes, WinProcs; #| |X X #| |X X type #| |X X m| |X X { Define a TApplications descendant } #| |X X THelloApp = object(TApplication) #| |X X procedure InitMa+================================+ |X X end; | |X=XXXXXXGo to Line NumberXXXXXXX| |X X<#X###############|###| | |X X|+========|=========|===| ##Enter new line number#XXXXXv | |X X| | | | | |X X| | | | | |X X| | | | +--------++--------++--------+ | |X X| | | | |ы OK X Cancel? Help | | |X X| | | | +---|----++--------++--------+ | |X X| | | | | | | |X X| | | +=====|===============|==========+ |X X|###1:1###|##Insert#|#########|###############|##############|X X+=========|=========|=========|===============|==============+X XXXXXXXXXXX|XXXXXXXXX|XXXXXXXXX|XXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXX | | | | | Окно Управляющий Диалоговое окно Горизонтальная элемент полоса прокрутки

Рис. 10.1 Выводимые на экран компоненты приложения Windows.

Приложение Windows - это специальный тип программы PC, кото- рая:

- должна иметь специальный выполняемый формат файла (.EXE);

- работать только с Windows;

- обычно работать в прямоугольном окне на экране;

- при выводе на экран следовать рекомендациям по стандартно- му интерфейсу с пользователем;

- может работать одновременно с другими программами Windows и прочими программами, включая другие экземпляры самое се- бя;

- может взаимодействовать и совместно использовать данные с другими приложениями Windows.



Цикл разработки прикладной программы


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

Используя в Windows интегрированную интерактивную среду раз- работки программ, вы значительно сократите время разработки. Бла- годаря многозадачным возможностям Windows, вы можете запустить IDE, Resource Workshop и свою прикладную программу одновременно. Поставляемые с Borland Pascal for Windows инструментальные средс- тва не только облегчают каждую задачу, но и сокращают число задач при разработке приложения Windows. По существу, это процесс можно сократить до следующих нескольких шагов:

1. Создание исходного кода программы и включение в программу имен файлов ресурсов, которые будут использоваться по ди- рективе {$R имя_файла}.

2. Создание ресурсов для диалоговых окон, меню и т.д.

3. Компиляция программы.

4. Интерактивная отладка программы.



Действия программы при запуске


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

* В HInstance сохраняется описатель экземпляра программы.

* В HPrevInst сохраняется описатель последнего экземпляра той же прикладной программы.

* В CmdShow записывается целое значение, представляющее на- чальный режим вывода основного окна. Оно используется для вызова метода Show.

* В CmdLine записывается командная строка вызова прикладной программы, включая параметры и имя файла, например "CALC.EXE /M" или "WORDPROC.EXE LETTER1.DOC".

Как приложение ObjectWindows, программа HelloApp должна строить и инициализировать объект основного окна. Она может ини- циализировать только первый экземпляр HelloApp с помощью метода InitApplication, либо инициализировать каждый экземпляр HelloApp с помощью метода InitInstance.

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



Динамическая компоновка


Windows позволяет приложениям, включая программы Borland Pascal, загружать и освобождать библиотечные модули на этапе ком- поновки. Эти модули должны быть записаны в специальном выполняе- мом формате (EXE), который называется динамически компонуемой библиотекой (DLL). Часто эти библиотеки выполняют специальные и сложные задачи, такие как преобразование форматов файлов. В этом случае программа может применять DLL как фильтры для экспорта и импорта файлов. Кроме того, DLL могут совместно использоваться группой приложений, что способствует совместному использованию и экономии памяти.



Динамический обмен данными


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



Взгляд на Windows


В данной главе содержится обзор программирования для Microsoft Windows с использованием Borland Pascal (с акцентом на объектно-ориентированное программирование). В представленном здесь примере используется поставляемая с Borland Pascal библио- тека ObjectWindows. Вы узнаете о поведении прикладной программы Windows и о том, как с помощью ObjectWindows автоматизировать од- ни задачи и упростить другие.

Чтобы извлечь из данной главы максимум пользы, вы должны по- нимать принципы объектно-ориентированного программирования. Если вы не знакомы с объектно-ориентированным программированием, про- читайте Главу 9 "Объектно-ориентированное программирование". Вы должны также знать, как работать с Windows.



Графика, независимая от устройств


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

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

Но графика, независимая от устройств, требует жертв. Для разработчика эти "жертвы" состоят в соблюдении в чем-то строгих требований GDI. GDI ограничивает возможности программиста в про- ектировании приложений.



Интерфейсные объекты


Хотя библиотека ObjectWindows определяет объекты для окон, диалоговых окон и управляющих элементов, она предусматривает только поведение объектов, их атрибуты и типы данных. Физической реализацией, визуальным отображением элемента на экране, управля- ет сама Windows. Таким образом, объекты ObjectWindows, которые мы называем интерфейсными объектами, взаимодействуют с соответствую- щими визуальными элементами, которые мы называет интерфейсными элементами. Успешное управление взаимодействием объект/элемент - это ключ к успешному программированию в Windows с использованием ObjectWindows.

Взаимодействие объект/элемент осуществляется через описатель окна. Когда вы строите интерфейсный объект, одной из его функций является указание Windows на создание интерфейсного элемента. Windows возвращает идентифицирующий этот элемент описатель, кото- рый объект сохраняет в поле с именем HWindow. Многие функции Windows воспринимают описатель окна в качестве параметра, поэтому сохранение его в поле поддерживает готовность доступа к оконному объекту. Аналогично, поля интерфейсного объекта можно использо- вать для сохранения информации о средствах отображения или инфор- мации о состоянии конкретного окна.



Изучение ObjectWindows


Теперь, когда вы поняли основы программирования в Windows и имеете начальные сведения об ObjectWindows, можете начинать прог- раммировать. Начните с чтения "Руководства по программированию с использованием ObjectWindows" и шаг за шагом изучите, как разра- батывать приложение ObjectWindows.

|



Элементарная программа


Традиционным введением в новый язык программирования или операционную среду является программа, выводящая сообщение "Hello, Word!", написанная на данном языке или для данной опера- ционной среды. Это программа содержит количество программного ко- да, достаточное для вывода на экран строки "Hello, Word!".

Конечно, в Windows нужно сделать значительно больше. Вам нужно вывести окно, записать в него текст и сделать так, чтобы окно взаимодействовало с "окружающим миром", по крайней мере вы должны иметь возможность закрыть окно и выйти. Если вы будете де- лать все это с самых основ, то даже для выполнения этих элемен- тарных задач потребуется очень большой объем кода. Например, программа GENERIC.PAS, содержащаяся на дистрибутивных дисках, вы- полняя такие элементарные действия, занимает более 100 строк.

Это связано с тем, что предъявляет к прикладной программе ряд требований, которые та должна удовлетворять перед тем, как она сможет работать в Windows. Даже простейшая программа требует большого объема исходного кода. К счастью, программы, написанные с использованием ObjectWindows, автоматически удовлетворяют этим требованиям (включая создание и вывод на экран основного окна и сохранение для приложения описателя окна). Таким образом, прог- рамма "Hello, Word!" сокращается всего до 16 строк.

program HelloApp;

uses WObjects;

type THelloWord = object(TApplication) procedure InitMainWindow; virtual; end;

procedure THelloWord.InitMainWindow; begin MainWindow := New(PWindow, Init(nil, 'Hello, Borland Pascal')); end;

var HelloWord: THelloWord;

begin HelloWord.Init('HelloWord'); HelloWord.Run; HelloWord.Done; end.



Лучший интерфейс с Windows


ObjectWindows использует объектно-ориентированные расширения Borland Pascal для инкапсуляции прикладного программного интер- фейса Windows (API), скрывая от вас детали программирования для Windows. В результате вы можете использовать IDE для Windows Borland Pascal для написания программ Windows, затрачивая сущест- венно меньше времени и усилий, чем это потребовалось бы при не- объектно-ориентированном программировании. ObjectWindows предус- матривает три полезных средства: инкапсуляцию информации окна, абстракцию функций API Windows и автоматический ответ на сообще- ния.



Многозадачность


Windows позволяет пользователям выполнять несколько приложе- ний параллельно, устраняя необходимость использования резидентных в памяти программ (TSR). В Windows реализована не просто многоза- дачность. Она поддержана набором средств и межпроцессорных комму- никаций, таких как буфер вырезанного изображения Clipboard и ди- намический обмен данными (DDE).

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

С точки зрения программиста это означает, что программа не должна записывать текст или графику непосредственно по экранным адресам, а должна выводить их в пользовательскую область окна - область внутри рамки окна. Аналогично, прикладная программа долж- на использовать память компьютера совместно с другими приложения- ми. Хорошо построенное приложение Windows корректно соблюдает правила Windows работы с экраном и управления памятью.



Множественный документальный интерфейс


Множественный документальный интерфейс (MDI) устанавливает соглашения по пользовательскому интерфейсу для создания окон, со- держащих внутри себя дочерние окна. Примером MDI может служить интегрированная интерактивная среда для Windows Borland Pascal. В оперативной области Borland Pascal пользователь может открыть сразу несколько окон. Каждое окно редактирования является дочер- ним окном.

mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm X+=[]=========================================================+X X|#=#XXXXXXXXXXXXXXXXXXXXBorland PascalXXXXXXXXXXXXXXXXXXXX|^|v|X X|---------------------------------------------------------+-+-|X X| File Edit Search Run Compile Tools Options Windows Help |X X|-------------------------------------------------------------|X X|+============================================+ |X X#=# c:\bpw\helloapp.pas |^|v| |X X----------------------------------------+-+-| |X X program Hello; ^| |X X #| |X X uses WObjects, WinTypes, WinProcs; #| |X X #| |X X type #| |X X m| |X X { Define a TApplications descendant } #| |X X THelloApp = object(TApplication) #| |X X procedure InitMainWindow; virtual; v| |X X<#X#######################################>#| |X X|+============================================+ |X X| |X X| |X X| |X X|###1:1######Insert###########################################|X X+=============================================================+X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Рис. 10.2 Окна IDE для Windows Borland Pascal - приложение MDI.



Назначение основного окна


Основное окно прикладной программы - это окно первоначально- го вывода прикладной программы при ее запуске. Оно отвечает за представления пользователю списка доступных команд (меню). Во время сеанса работы с прикладной программой основное окно управ- ляет интерфейсом прикладной программы и во многих случаях являет- ся единственной рабочей областью программы, создавая, когда это требуется, диалоговые окна. Другие, более сложные приложения, мо- гут использовать в качестве рабочих областей несколько окон. Ког- да пользователь закрывает основное окно, он инициализирует про- цесс закрытия прикладной программы.



Объектно-ориентированная работа с окнами


Как можно видеть, программирование в многооконной среде тре- бует знания многих событий, форматов, описателей и других прило- жений, поэтому разработка программы Windows может показаться трудной задачей. К счастью, объектно-ориентированное программиро- вание упрощает задачу программирования для многооконной среды и позволяет разработчику прикладной программы сосредоточиться на функциях приложения, а не на его форме. Используя объекты для представления таких сложных структур как окна, программы Borland Pascal могут инкапсулировать свои операции и хранение данных. Этой цели служит ObjectWindows.

Объектно-ориентированное программирование обеспечивает ту основу, в рамках которой программист может использовать объекты для представления элементов интерфейса с пользователем программы Windows. Это означает, что окно является объектом.

Окно ObjectWindows объектные типы прикладной программы под- держивают требуемую от программы Windows работу с сообщениями, значительно упрощая взаимодействие программиста с пользователем. Фактически, объекты ObjectWindows представляют не только окна, они представляют диалоговые блоки и управляющие элементы, такие как блоки списка и командные кнопки.



Преимущества Windows


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

* Стандартные и предсказуемые операторы: если вы знаете, как использовать одно приложение Windows, то сможете работать со всеми остальными.

* Для каждого приложения нет необходимости устанавливать драйверы устройств и устройства: в Windows предусмотрены драйверы для поддержки периферийной аппаратуры.

* Межпрограммное взаимодействие и связь.

* Многозадачность: возможность одновременно запускать мно- жество программ.

* Доступ к большему объему памяти: Windows поддерживает за- щищенный режим.

Для разработчиков эти преимущества включают в себя:

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

* Непосредственную поддержку широкого диапазона принтеров, мониторов и устройств типа "мышь".

* Богатую библиотеку графических подпрограмм.

* Больше памяти для больших программ.

* Поддержку меню, пиктограмм, битовых массивов и др.



Программные средства


Для разработчиков прикладных программ Windows предусматрива- ет широкий диапазон программных средств.



Ресурсы


Ресурсы представляют собой описания устройств пользователь- ского интерфейса приложения Windows: его меню, диалоговых окон, курсоров, пиктограмм, битовые массивы, строки и командные клави- ши. Windows обеспечивает средства для поддержки этих описаний вне исходного кода приложения. Ресурсы приложения объединяются с его выполняемым файлом перед выполнением приложения. Чтобы ограничить использование памяти, приложение вызывает ресурсы в память только когда они необходимы.

Отделение спецификаций ресурса от исходного кода имеет до- полнительное преимущество: вы можете изменить вид приложения, не затрагивая исходного кода программы. Фактически, для модификации ресурсов приложения вам не нужно даже иметь исходный код. Это об- легчает настройку или трансляцию существующих приложений Windows.

Для создания и настройки ресурсов Borland Pascal включает в себя пакет разработчика ресурсов Resourse Workshop.



Структура программы Windows


При наличии такого множества взаимодействующих элементов программного обеспечения как DOS, Windows и прикладные программы полезно знать о том, какие части ваших приложений Windows взаимо- действуют с окружающей их программной средой. В данном разделе исследуется структура типичных приложений Windows, написанных в Borland Pascal with Objects.



Структура Windows


На этапе выполнения функциональные возможности Windows и ее API сосредоточены в трех библиотечных модулях, вызываемых работа- ющими в данный момент приложениями. Это следующие модули Windows:

* KERNEL.EXE - управляет распределением памяти и ресурсов, выполняет планирование и взаимодействие с DOS.

* GDI.EXE - выводит на экран и на принтер графику.

* USER.EXE - работает с окнами, вводом данных от пользовате- ля и коммуникациями.

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



Типы данных Windows


Благодаря схеме управления данными Windows и ее подобию язы- ку программирования Си, программированию для Windows с помощью Borland Pascal способствуют некоторые специализированные типы данных. Например, описатель окна сохраняется под типом HWnd. Borland Pascal и ObjectWindows определяют новые типы, содействую- щие работе с таким типом как HWnd. Все эти новые типы и структуры данных описаны в "Руководстве по программированию с использовани- ем ObjectWindows".



Требования


Обратной стороной ряда предлагаемых Windows пользователю преимуществ является перечень более строгих аппаратных требова- ний. В общем случае Windows требует для производительности, срав- нимой с приложением DOS лучших графических средств, больших объ- емов памяти, более быстрых процессоров. Если вы располагаете про- цессором 80286 или старше и не менее 2 мегабайтами памяти, то Windows будет прекрасно работать.



Управление памятью


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

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

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

При обычной работе вам не потребуется иметь дело с самими описателями. Вы можете выделять и освобождать память в динамичес- ки распределяемой области с помощью обычных подпрограмм New, Dispose, GetMem и FreeMem, а Borland Pascal будет взаимодейство- вать с Windows и обеспечивать для нее информацию о том, на что фактически ссылаются эти указатели.

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



Взаимодействие с Windows и DOS


Из-за ограниченного масштаба операционной системы DOS легко предвидеть, как будет влиять DOS на успешное выполнение ваших прикладных программ. Тем не менее, программа для DOS работает благодаря взаимодействию между вашей программой и средствами опе- рационной системы.

Аналогичное правило действует для программы Windows. Пос- кольку Windows предлагает значительно большее число функциональ- ных вызовов операционной системы, взаимодействие между Windows и вашей программой отследить значительно труднее. Например, чтобы вывести графику на экран, ваша программа должна вызвать функцию GDI Windows. Для реакции на нажатие пользователем кнопки "мыши" программа должна определять метод реакции (ответа) на сообщение. Ваша программа должна непрерывно взаимодействовать с операционной системой (DOS + Windows).