4. Приложения Windows, разновидности. Структура оконных (windowed) приложений.

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

Синхронное и асинхронное выполнение программ

Прежде всего, заметим, что по способу выполнения все программы можно разделить на синхронные и асинхронные.
Синхронные программы состоят из одного или нескольких программных модулей, и полностью контролируют процесс передачи управления от одной команды программы к другим или от одного модуля к другим.
Изменение последовательности выполнения команд, фрагментов или модулей асинхронных программ, напротив, могут исполняться под воздействием внешних событий, возникающих при работе устройств ввода, вывода или системного таймера. При асинхронном выполнении программа не в состоянии контролировать процесс передачи управления между своими модулями, т.к. он может происходить в непредсказуемое время под влиянием внешних воздействий.
Программы, создаваемые для некогда популярной операционной системы MS-DOS, выполняются синхронно.

Однопоточные и многопоточные программы

Операционная система MS-DOS допускает в любой момент времени работу только одной программы. Это означает, что после запуска программы пользователь должен дождаться ее завершения, и только потом он сможет запустить другую программу.
В отличие от MS-DOS, современные операционные системы, такие как Microsoft Windows и Linux, работают в так называемом многопоточном (multithreading) режиме.

В операционной системе Windows возможны 3 типа структур программ:

Диалоговые приложения для Windows имеют минимальный интерфейс связи с пользователем и передают информацию пользователю посредством стандартных диалоговых окон (например, окно сообщения MessageBox()). Работа программы происходит «вслепую».

Неоконные (консольные) приложения представляет собой программу, работающую в текстовом режиме.

Оконные (каркасные) приложения строятся на базе специального набора функций API, составляющих графический интерфейс пользователя (GUI, Graphic User Interface). Главным элементом такого приложения является окно. Окно может содержать элементы управления: кнопки, списки, окна редактирования и др. Эти элементы, по сути, также являются окнами, но обладающими особыми свойствами. События, происходящие с этими элементами (и самим окном), приводят к приходу сообщений в процедуру окна.
Разница между оконными и консольными приложениями Windows состоит в том, с каким типом информации они работают.

Структура оконного приложения

Оконные приложения строятся по принципам событийно-управляемого программирования (event-driven programming) - стиля программирования, при котором поведение компонента системы определяется набором возможных внешних событий и ответных реакций компонента на них. Такими компонентами в Windows являются окна.

С каждым окном в Windows связана определенная функция обработки событий – оконная функция. События для окон называются сообщениями. Сообщение относится к тому или иному типу, идентифицируемому определенным кодом (32-битным целым числом), и сопровождается парой 32-битных параметров (WPARAM и LPARAM), интерпретация которых зависит от типа сообщения.

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

Классическое оконное приложение, как правило, состоит по крайней мере из двух функций: