Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП / ООП_Лекции.doc
Скачиваний:
50
Добавлен:
08.06.2015
Размер:
1.03 Mб
Скачать

2. Программирование для Windows

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

Окно (window) — прямоугольная область экрана для организации обмена между пользователем и приложением. Окно совместно использует экран с другими окнами, в том числе и других приложений. Единовременно пользо­ватель может осуществлять ввод только в одно окно и приложение, к кото­рому это окно относится.

Окно первым появляется при запуске системы или любого приложения и последним исчезает при завершении работы. Общение с объектом-окном возможно при помощи сообщений. (Объектно-ориентированные языки обеспечивают взаимодействие между объектами при помощи методов — функций-сообщений.)

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

В случае многопотокового приложения (multithreaded application) сообщение приходит активному потоку (thread) приложения.

Наступление события обозначается поступлением сообщения. Все сообщения Windows имеют стандартные имена, многие из которых начинаются с префикса WH_ (Windows Message). Например, WM_PAINT именует сообщение о том, что необ­ходимо перерисовать содержимое окна того приложения, которое получило это сообщение. Идентификатор сообщения WM_PAINT — это символьная константа, обозначающая некое число.

Механизм сообщений в Windows реализуется при помощи очереди сообщений, поддерживаемой системой. Каждое сообщение попадает в такую очередь, где и ожидает последующей обработки.

Многие основные черты Windows обязаны своей спецификой тому факту, что она является системой, основанной на сообщениях. Такой подход к программи­рованию заключается он в том, что реакция (и поведение) программы определяется внешними событиями. Windows сообщает приложению, а точ­нее, окну приложения о некотором событии при помощи сообщения, кото­рое описывает некоторое изменение, произошедшее в окружающей прило­жение среде. Более того, механизм сообщений является единственным спо­собом связи самих приложений со своими окнами. Происходит это через операционную систему, которая перенаправляет сообщения нужному объек­ту (окну). Сообщения используются для настройки, изменения и диагности­ки состояния всех окон. Таким образом, сообщения — это вход в приложе­ние. Они представляют собой события, на которые, при необходимости, должно реагировать приложение. Каждое сообщение связывается с кон­кретным окном, с каждым из которых, в свою очередь, связана собственная оконная процедура. Все сообщения, источником которых служат аппаратные средства, система помещает в определенную структуру данных — первичную входную очередь (raw input queue).

Каждое окно в Windows имеет специальную функцию, которая вызывается для обслуживания сообщений. Операционная система может только послать сообщение окну, а оно уже само решает, что с ним делать. Точнее, про­граммист определяет реакцию окна на получаемые сообщения. В течение этого процесса окно действует как автономный объект, живущий своей соб­ственной жизнью.

Рассмотрим такой пример. Пользователь приложения нажимает клавишу на клавиатуре, а система вырабатывает сообщение об этом событии. Вы знаете, что Windows обеспечивает поддержку клавиатуры, не зависящую от типа устройства (device-independent support). Для каждого типа клавиатуры она устанавливает соответствующий драйвер, то есть специальную программу, которая служит по­средником между клавиатурой и операционной системой. Клавиатурная поддерж­ка Windows не зависит также от языка общения с системой. Это достигается использованием специальной клавиатурной раскладки (layout), которую пользо­ватель выбрал в данный момент. Каждой клавише присвоено уникальное значе­ние — идентификатор клавиши, зависящий от типа устройства и называемый скан-кодом. Когда пользователь вводит символ, то клавиатура генерирует два скан-кода: один — когда он нажимает клавишу, и другой — когда отпускает. Скан-коды с клавиатуры поступают в клавиатурный драйвер, который, используя те­кущую раскладку, транслирует их и преобразует в сообщения.

Клавиатурный драйвер интерпретирует скан-код и преобразует его в опреде­ляемый Windows код виртуальной клавиши (virtual-key code), не зависящий от типа устройства и идентифицирующий функциональный смысл клавиши. После этого преобразования скан-кода драйвер создает сообщение, в которое включа­ются: скан-код, виртуальный код и другая информация о нажатии клавиши, и помещает его в очередь системных сообщений. Windows выбирает сообщение из этой очереди и посылает его в очередь сообщений соответствующего потока (thread). В конце концов цикл выборки сообщений данного потока передает его соответствующей оконной процедуре для обработки. Модель ввода с клавиату­ры в системе Windows представлена на рис.

Рис. Схема генерации и движения сообщений Windows

Соседние файлы в папке ООП