Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Общая структура приложения Windows




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

При написании любых программ для Windows необходим включаемый файл windows.h. В нем содержатся прототипы всех функций Windows, определены типы и структуры данных, глобальные переменные и константы.

Как уже отмечалось выше, приложение Windows содержит, по крайней мере, два принципиально важных модуля:

Функция WinMain();

Функция WndProc().

Функция WinMain

Подобно функции main обычной программы на Си, функция WinMain обязана присутствовать в каждом приложении Windows. Функции WinMain передается управление в начальный момент загрузки приложения. Перечислим действия, выполняемые WinMain:

регистрация класса окна приложения и другие инициализации;

создание главного окна приложения и, возможно, других, подчиненных окон;

запуск цикла обработки сообщений, помещаемых в очередь приложения;

завершение работы приложения при извлечении из очереди сообщения WM_QUIT.

Шаблон функции WinMain выглядит так:

int PASCAL WinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow)

HANDLE hInstance; // дескриптор текущей копии

HANDLE hPrevInstance; // предыдущая копия

LPSTR lpCmdLine; // указатель на командную строку

int nCmdShow; // флаг “окно_открыто/окно_закрыто

{ }

Функция WinMain имеет четыре параметра. Первый параметр – hInstance – является дескриптором копии приложения. Это число однозначно определяет каждую копию приложения, исполняемую под Windows. Можно одновременно выполнять несколько копий одного приложения, при этом каждой копии будет соответствовать уникальный индекс.

Второй параметр – hPrevInstance – является дескриптором, определяющим копию данного приложения, которая была последней активной копией. Если параметр hPrevInstance равен нулю, других копий этого приложения не существует.

Третий параметр – lpCmdLine – это дальний указатель на командную строку, оканчивающуюся нулем. Он позволяет приложению получать данные через командную строку.

Четвертый параметр – nCmdShow – определяет, как приложение первоначально отображается на дисплее: пиктограммой (nCmdShow = SW_SHOWMINNOACTIVE) или в виде открытого окна (nCmdShow = SW_SHOWNORMAL).

Работа с копиями приложения

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

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

Для того, чтобы отличить одну копию данных от другой той же программы, каждой копии программы Windows ставит в соответствие уникальный дескриптор копии приложения (instance handle). Соответствующую целочисленную переменную hInstance Windows передает функции WinMain при вызове в качестве одного из обязательных параметров. Другим обязательным параметром является также целочисленный параметр hPrevInstance, который позволяет копии программы в процессе работы определить, первая она или нет. При запуске первой копии Windows присваивает hPrevInstance значение нуль.

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

Если по логике программы запуск двух ее копий нежелателен или не допустим, то можно запретить запуск второй копии, поместив в функцию WinMain проверку:

if (hPrevInstance) return NULL;

 


Поделиться:

Дата добавления: 2015-04-21; просмотров: 140; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты