Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.doc
Скачиваний:
17
Добавлен:
14.02.2015
Размер:
641.54 Кб
Скачать

Точка входа программы

Текст программы начинается с инструкции #include, которая позволяет включить в программу заголовочный файл WINDOWS.H:

#include <windows.h>

WINDOWS.H включает в себя много других заголовочных файлов, содержащих объявления функций Windows, структур Windows, новые типы данных и числовые константы.

За инструкцией #includeследует объявлениеWndProc:

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

Это объявление в начале программы необходимо потому, что в тексте функции WinMainимеются ссылки на функциюWndProc.

В программе на языке С, написанной для традиционной среды, точкой входа является функция main. С этого места программа начинает выполняться. (Фактически функция main является точкой входа в ту часть программы, которая пишется программистом. Обычно компилятор С должен вставить некоторый стартовый код в исполняемый файл. Этот код и вызывает функциюmain.) Точкой входа программы для Windows является функцияWinMain.WinMain всегда определяется следующим образом:

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

Эта функция использует последовательность вызовов WINAPI и, по своему завершению, возвращает операционной системе Windows целое. Функция называется WinMain. В ней есть четыре параметра.

Параметр hInstanceназывается описателем экземпляра (instance handle). Это уникальное число, идентифицирующее программу, когда она работает под Windows. Может так случиться, что пользователь запустит под Windows несколько копий одной и той же программы. Каждая копия называется "экземпляром" и у каждой свое значениеhInstance. Описатель экземпляра можно сравнить с "идентификатором задачи" или "идентификатором процесса" — обычными терминами многозадачных операционных систем.

Параметр hPrevInstance—всегда равен NULL.

Параметр szCmdLine— это указатель на оканчивающуюся нулем строку, в которой содержатся любые параметры, переданные в программу из командной строки. Вы можете запустить программу для Windows с параметром командной строки, вставив этот параметр после имени программы в командной строке MS-DOS или указать имя программы и параметр в окне диалога Run, которое вызывается из меню Start.

Параметр iCmdShow— число, показывающее, каким должно быть выведено на экран окно в начальный момент. Это число задается при запуске программы другой программой. Программисты достаточно редко обращаются к этому числу, но при необходимости такая возможность существует. В большинстве случаев число равно 1 или 7. Но лучше не думать об этом значении как о единице или как о семерке. Лучше думайте о них как об идентификаторе SW_SHOWNORMAL (заданном в заголовочных файлах Windows равным 1) или идентификаторе SW_SHOWMINNOACTIVE (заданном равным 7). Префикс SW в этих идентификаторах означает "показать окно" (show window). Параметр показывает, необходимо ли запущенную пользователем программу выводить на экран в виде окна нормального размера или окно должно быть изначально свернутым.

Оконная процедура

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

У каждого окна, создаваемого программой, имеется соответствующая оконная процедура. Windows посылает сообщение окну путем вызова оконной процедуры, на основе этого сообщения окно совершает какие-то действия и затем возвращает управление Windows. "Windows посылает программе сообщение" — имеется в виду, что Windows вызывает функцию внутри программы. Параметры этой функции описывают параметры сообщения. Эта функция, находящаяся в вашей программе для Windows, называется оконной процедурой (window procedure). Все это называется ”Архитектура, управляемая событиями”.

Более точно, окно всегда создается на основе"класса окна". Класс окна определяет оконную процедуру,обрабатывающую поступающие окну сообщения. Использование класса окна позволяет создавать множество окон на основе одного и того же класса окна и, следовательно, использовать одну и ту же оконную процедуру.Например, все кнопки во всех программах дляWindows созданы на основе одного и того же класса окна. Этот класс связан с оконной процедурой(расположенной в динамически подключаемой библиотекеWindows), которая управляет процессом передачи сообщений всем кнопкам всех окон.В объектно-ориентированном программировании любой"объект" несет в себе сочетание кода и данных. Окно— это объект. Код— это оконная процедура. Данные— это информация, хранимая оконной процедурой, и информация,хранимая системойWindows для каждого окна и каждого класса окна, которые имеются в системе.Оконная процедура обрабатывает сообщения, поступающие окну. Очень часто эти сообщения передают окну информацию о том, что пользователь осуществил ввод с помощью клавиатуры или мыши. Таким образом,например, кнопки"узнают" о том, что они нажаты. Другие сообщения говорят окну о том, что необходимо изменить размер окна или о том, что поверхность окна необходимо перерисовать.Когда программа дляWindows начинает выполняться, Windows строит для программы очередь сообщений(messagequeue). В этой очереди хранятся сообщения для любых типов окон, которые могли бы быть созданы программой.Небольшая часть программы, которая называется циклом обработки сообщений(message loop), выбирает эти сообщения из очереди и переправляет их соответствующей оконной процедуре. Другие сообщения отправляются непосредственно оконной процедуре минуя очередь сообщений.