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

6.1. Файлы заголовков

Все Windows приложения включают стандартный заголовочный файл <Windows.h>, который содержит необходимые объявления. Включение макроса STRICT перед заголовочным файлом, позволяет задействовать строгую проверку соответствия типов данных Windows, а макрос WIN32_LEAN_AND_MEAN убирает излишнюю информацию из файла <Windows.h>, что сокращает время компиляции.

6.2. Глабальные переменные

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

6.3. Точка входа в приложение

Как уже было сказано, точкой входа в Windows приложение является функция WinMain(), которая всегда имеет четыре параметра:

HINSTANCE hInstance – дескриптор экземпляра приложения. Каждому запущенному приложению операционная система ставит в соответствие блок информации, которая сохраняется Windows в специальном списке все время, пока приложение находится в памяти компьютера. Указатель на этот блок является уникальным в системе и передается приложению в качестве дескриптора. Приложение использует этот дескриптор как параметр при функциональных запросах на выделение системных ресурсов.

HINSTANCE hPrevInstance – дескриптор экземпляра приложения, запущенного ранее. Операционная система Windows позволяет запускать несколько копий одного и того же приложения. В Win16 через этот параметр передавался дескриптор приложения, запущенного последним. Приложение, на основе этой информации, могло, например, запретить запуск повторных копий. В Win32 этот параметр всегда равен NULL.

LPSTR lpCmdLine – указатель на командную строку. Вы уже знакомы с командными строками, изучая DOS. Заметим, что командная строка в Windows не разбирается на составляющие опции.

int nCmdShow – параметр, указывающий как должно быть отображено главное окно приложения: свернутым в иконку, распахнутым на весь экран или нормальным образом.

6.4. Необходимые переменные

Вы должны определить имя регистрируемого класса. Строгих правил для выбора данного имени не существует, просто вы должны обеспечить его уникальность в системе. Помните, что некоторые имена классов уже определены в Windows, например, “Edit” или “ListBox”. Здесь же вы можете задать строковую константу, которая будет использоваться как имя программы и будет отображена в заголовке окна.

Нужно сохранить дескриптор экземпляра приложения в глобальной переменной.

6.5. Регистрация класса окна

Перед регистрацией класса окна проводится заполнение полей структуры WNDCLASS, которая определена в заголовочном файле <Windows.h>. Мы используем только три основных поля, в частности, wc.lpfnWndProc, как указатель на функцию окна приложения, wc.hInstance, как значение дескриптора экземпляра приложения и wc.lpszClassName, как указатель на имя регистрируемого класса. Кроме того, вы можете указать:

- стиль или стили класса, например,

wc.style = 0;

- пикторгамму приложения, например, стандартную,

wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);

- изображение курсора,

wc.hCursor = LoadCursor(NULL, IDC_ARROW);

- кисть для закрашивания фона окна,

wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

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

wc.lpszMenuName = NULL;

Полную описание всех полей структуры WNDCLASS вы найдете в любой справочной системе по Win32 API.

После заполнения полей структуры WNDCLASS, указатель на нее передается в функцию RegisterClass(&wc), которая и проводит регистрацию класса окна.

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

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