Студопедия

КАТЕГОРИИ:

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


Концепция программы управляемой событиями.




GUI-программа для Windows. Варианты входной функции программы.

GUI (Graphical user interface, графический пользовательский интерфейс) — разновидность пользовательского интерфейса, в котором элементы интерфейса (меню, кнопки, значки, списки и т. п.), представленные пользователю на дисплее, исполнены в виде графических изображений.

В GUI пользователь имеет произвольный доступ (с помощью устройств ввода — клавиатуры, мыши, джойстика и т. п.) ко всем видимым экранным объектам (элементам интерфейса) и осуществляет непосредственное манипулирование ими.

Для GUI-программ используется ключ для компоновщика, чтобы в исполняемом файле был указан соответствующий тип подсистемы - /SUBSYSTEM:WINDOWS. Затем загрузчик загружает программу в память.

Во всех Windows-приложениях должна быть входная функция. Существует четыре такие функции:

1) int WINAPI WinMain (HINSTANCE hinst, HINSTANCE, LPSTR pszCmdLine, int nCmdShow);

2) int WINAPT wWinMain (HINSTANCE hinst, HINSTANCE hPrelnst, PWSTR pszCmdLine, int nCmdShow);

Первый параметр, hInst, представляет собой дескриптор экземпляра приложения.

Второй, hPrelnst, всегда содержит значение NULL, что указывает на отсутствие других, запущенных ранее, экземпляров приложения.

Третий параметр, pszCmdLine, служит указателем на строку, завершающуюся нулевым символом и содержащую командную строку программы.

Последний параметр, nCmdShow, задает одну из многочисленных констант, определяющих возможные варианты отображения окна, например SW_SHOWNORMAL, SW_SHOWMAXIMIZED или SW_SHOWMINIMIZED.

3) int _cdecl main (int argc, char*argv[], char*envp[]);

4) int _cdecl wmain (int argc, wchar_t*argv[], wchar_t*envp[]);

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

Тип приложения Входная функция Стартовая функция
GUI-приложение, работающее с ANSI-символами и строками WinMain WinMainCRTStartup
GUI-приложение, работающее с Unicode-символами и строками wWinMain wWinMainCRTStartup
СUI-приложение, работающее с ANSI-символами и строками main mainCRTStartup
СUI-приложение, работающее с Unicode-символами и строками wmain wmainCRTStartup

В проекте можно вообще не указывать ключ /SUBSYSTEM компоновщика, тогда компоновщик будет сам определять подсистему для приложения. При компоновке он проверит, какая из четырех функций (WinMain, wWinMain, main или wmain) присутствует в коде, и на основании этого выберет подсистему и стартовую функцию из библиотеки С++.

Все стартовые функции выполняют:

1. считывают указатель на полную командную строку нового процесса;

2. считывают указатель на переменные окружения нового процесса;

3. инициализируют глобальные переменные из библиотеки С++, доступ к которым из кода обеспечивается включением файла StdLib.h.

4. инициализируют кучу (динамически распределяемую область памяти), используемую С-функциями выделения памяти (malloc и calloc) и другими процедурами низкоуровневого ввода-вывода;

5. вызывают конструкторы всех глобальных и статических объектов С++-классов.

Когда входная функция возвращает управление, стартовая обращается к функции exit библиотеки С++ и передает ей значение nMainRetVal. Функция exit выполняет следующие операции:

1. вызывает все функции, зарегистрированные вызовами функции _onexit;

2. вызывает деструкторы всех глобальных и статических объектов С++-классов;

3. вызывает Windows-функцию ExitProcess, передавая ей значение nMainRetVal. Это заставляет операционную систему уничтожить процесс и установить код его завершения.

CUI-программа для Windows. Варианты входной функции программы.

Приложения CUI (Сonsole user interface, консольный пользовательский интерфейс) работают в текстовом режиме: они не формируют окна, не обрабатывают сообщения и не требуют GUI. И хотя консольные приложения на экране тоже размещаются в окне, в нем содержится только текст.

Для CUI-программ используется ключ для компоновщика, чтобы в исполняемом файле был указан соответствующий тип подсистемы - /SUBSYSTEM:CONSOLE. Затем загрузчик автоматически создает текстовое консольное окно.

Во всех Windows-приложениях должна быть входная функция. Существует четыре такие функции:

1) int WINAPI WinMain (HINSTANCE hinst, HINSTANCE, LPSTR pszCmdLine, int nCmdShow);

2) int WINAPT wWinMain (HINSTANCE hinst, HINSTANCE hPrelnst, PWSTR pszCmdLine, int nCmdShow);

Первый параметр, hInst, представляет собой дескриптор экземпляра приложения.

Второй, hPrelnst, всегда содержит значение NULL, что указывает на отсутствие других, запущенных ранее, экземпляров приложения.

Третий параметр, pszCmdLine, служит указателем на строку, завершающуюся нулевым символом и содержащую командную строку программы.

Последний параметр, nCmdShow, задает одну из многочисленных констант, определяющих возможные варианты отображения окна, например SW_SHOWNORMAL, SW_SHOWMAXIMIZED или SW_SHOWMINIMIZED.

3) int _cdecl main (int argc, char*argv[], char*envp[]);

4) int _cdecl wmain (int argc, wchar_t*argv[], wchar_t*envp[]);

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

Тип приложения Входная функция Стартовая функция
GUI-приложение, работающее с ANSI-символами и строками WinMain WinMainCRTStartup
GUI-приложение, работающее с Unicode-символами и строками wWinMain wWinMainCRTStartup
СUI-приложение, работающее с ANSI-символами и строками main mainCRTStartup
СUI-приложение, работающее с Unicode-символами и строками wmain wmainCRTStartup

В проекте можно вообще не указывать ключ /SUBSYSTEM компоновщика, тогда компоновщик будет сам определять подсистему для приложения. При компоновке он проверит, какая из четырех функций (WinMain, wWinMain, main или wmain) присутствует в коде, и на основании этого выберет подсистему и стартовую функцию из библиотеки С++.

Все стартовые функции выполняют:

6. считывают указатель на полную командную строку нового процесса;

7. считывают указатель на переменные окружения нового процесса;

8. инициализируют глобальные переменные из библиотеки С++, доступ к которым из кода обеспечивается включением файла StdLib.h.

9. инициализируют кучу (динамически распределяемую область памяти), используемую С-функциями выделения памяти (malloc и calloc) и другими процедурами низкоуровневого ввода-вывода;

10. вызывают конструкторы всех глобальных и статических объектов С++-классов.

Когда входная функция возвращает управление, стартовая обращается к функции exit библиотеки С++ и передает ей значение nMainRetVal. Функция exit выполняет следующие операции:

4. вызывает все функции, зарегистрированные вызовами функции _onexit;

5. вызывает деструкторы всех глобальных и статических объектов С++-классов;

6. вызывает Windows-функцию ExitProcess, передавая ей значение nMainRetVal. Это заставляет операционную систему уничтожить процесс и установить код его завершения.

Концепция программы управляемой событиями.

Программы, управляемые событиями, обладают большей гибкостью в смысле выбора пользователем порядка выполнения операций. Характерно то, что последовательность действий часто определяется операционной системой и зависит от потока сообщений о событиях в системе. Большую часть времени приложение, управляемое событиями, находится в состоянии ожидания событий, точнее сообщений о них. Сообщения могут поступать от различных источников, но все они попадают в одну очередь системных сообщений. Только некоторые из них система передаст в очередь сообщений вашего приложения. В случае многопотокового приложения сообщение приходит активному потоку (thread) приложения. Приложение постоянно выполняет цикл ожидания сообщений. Как только придет адресованное ему сообщение, управление будет передано его окопной процедуре.


Поделиться:

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





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