Программирование устройств в Windows: Методические указания к выполнению практических и лабораторных работ по курсу “Операционные системы, среды и оболочки”, страница 2

Конкретнее, сообщение посылается в цикл опроса сообщений, который затем передает его в WndProc, или поступает в процедуру WndProc непосредственно. А та уже решает, что делать с этим сообщением.

Часто процедура WndProc отвечает: "Подождите, я не готова. Один файл еще не был сохранен."  Затем WndProc высвечивает окно, спрашивая, нужно ли сохранить этот файл. Если да, то WndProc сохраняет его и сообщает операционной системе, что она готова к завершению. В течение этого процесса окно действует в основном как автономный объект со своей собственной жизнью. Оно знает достаточно, чтобы сообщить менеджеру программ, что  должно быть сделано и даже может связаться с пользователем и потребовать, чтобы какие-то концы были подобраны, прежде чем произойдет что-нибудь еще. Это суть объектно-ориентированного поведения. При регистрации окна операционная система информируется о некоторых характерных чертах соответствующего класса. Например, она узнает следующие характеристики.

1)  имя класса окна,

2)  пиктограмма окна,

3)  форма курсора, ассоциированного с окном,

4)  фоновый цвет этого окна,

5)  имя меню; ассоциированного с этим окном.

3.1 Вызов главной программы

Начнем с повторного рассмотрения заголовка главной программы:

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

2)  Второй параметр — уникальное число, ассоциированное с предыдущими экземплярами этой программы. Если на рабочем столе таковых не имеется, этот параметр устанавливается равным NULL.

3)  Третий параметр — цепочка символов, содержащая любую информацию, передающуюся из командной строки.

4)  Четвертый параметр характеризует вид, в котором программа должна появляться на экране: минимизированной, максимизированной или подразумевающейся по умолчанию.

Первый и второй параметры, передаваемые главной программе, объявляются как тип HINSTANCE. Тип HINSTANCE — не что иное, как дескриптор, или уникальное число, которое Windows использует для идентификации конкретного предмета на рабочем столе. То же самое происходит в DOS, когда операционная система назначает дескриптор каждому открытому файлу.

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

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

Фирма Microsoft изобрела тип HINSTANCE, чтобы способствовать написанию легко читаемых программ со строгой проверкой типов, помогающей избегать ошибок по невнимательности. Однако существует и другая причина создания этого типа. Эта вторая причина касается создания легко переносимого на различные архитектуры кода. Дело в том, что фирма Microsoft хотела быть уверенной, что код главной программы будет компилироваться даже в таких операционных системах, где тип integer определяется не так, как на 16-битной машине. Поэтому были выбраны типы, которые могут быть легко переопределены в новой операционной системе. Другими словами, int — правильный тип для HINSTANCE, в обычной Windows, но не в Windows NT. Поэтому создатели Windows разработали систему, достаточно гибкую для того, чтобы позволить  использовать один и тот же код в различных системах.