Лабораторная работа N 2
Исследование способов создания приложения с использованием программного интерфейса Windows
( Application Program Interface - API )
3. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
В отличие от традиционных программ MS-DOS, приложения
Microsoft Windows не делают явных вызовов функций ( таких как getch() ) для получения возможности ввода информации.
Вместо этого они ждут, когда ОС Windows передаст им ввод.
Windows передает весь ввод для приложения различным окнам данного приложения. Каждое окно имеет функцию, называемую оконной процедурой, которую вызывает Windows, когда есть вводимая информация для окна. Оконная процедура обрабатывает ввод и возвращает управление Windows.
ОС Windows передает ввод в оконную процедуру в форме сообщений. Сообщения генерируются Windows и приложениями. ОС
Windows генерирует сообщения:
- при любом событии ввода, например, при нажатии клавиши клавиатуры, передвижении мыши или выборе мышью органа управления окна ( щелчке кнопкой мыши );
- в ответ на любое изменение системных установок, производимых приложением, например, изменение шрифта или размеров окна.
Приложение может генерировать сообщения для управления собственными окнами или для взаимодействия с окнами других приложений.
В текущий момент Windows может показывать любое число окон. Чтобы направить ввод мыши или с клавиатуры соответствующему окну, ОС Windows использует очереди сообщений.
Имеется единственная системная очередь сообщений и требуемое число очередей сообщений приложения ( по одной для каждого потока ). При операциях с мышью или клавиатурой соответствующий драйвер преобразует ввод в сообщения и помещает их в системную очередь сообщений. ОС Windows выбирает сообщения по одному из системной очереди, определяет, какому окну они предназначаются и помещает их в очередь сообщений потока, который создал окно, получающее ввод. Поток удаляет сообщения из своей очереди, указывая Windows передать их соответствующей оконной процедуре для обработки.
Основная задача приложения Windows заключается в обслуживании собственной очереди сообщений.
╔════════════╗
║ Клавиатура ║
╚════════════╝
|
\/
╔════════════╗
║ Драйвер ║
╚════════════╝
|
\/
╔══════════════════════════════╗
║ Системная очередь сообщений ║
╚══════════════════════════════╝
|
\/
╔══════════════════════════════╗
║ Очередь сообщений приложения ║
╚══════════════════════════════╝
|
\/
╔══════════════════════════════╗
║ GetMessage () ║
║ TranslateMessage () ║
║ DispatchMessage () ║
╚══════════════════════════════╝
|
\/
╔══════════════════════════════╗
║ Оконная процедура ║
╚══════════════════════════════╝
Рис. Стандартный процесс обработки сообщений
Windows посылает сообщение оконной процедуре в виде набора четырех параметров: идентификатор ( handle ) окна, номер сообщения ( message identifier ) и два 32-битных значения, называемых параметрами сообщения. Идентификатор окна определяет окно, которому послано сообщение. Номер сообщения представляет собой именованную константу, идентифицирующую назначение сообщения. Например, идентификатор сообщения WM_PAINT говорит оконной процедуре, что клиентная область окна изменилась и должна быть перерисована.
Значение и назначение параметров сообщения зависит от сообщения. Параметр сообщения может содержать целое число, упакованные битовые флаги, указатель на структуру, содержащую дополнительные данные и т.д. Если сообщение не использует свои параметры, обычно они устанавливаются в NULL.
Оконная процедура должна проверить идентификатор сообщения для правильной интерпретации параметров сообщения.
/* ------------------------------------------------------ *
* Window1: API Windows
* ------------------------------------------------------ */
#define STRICT
#include <windows.h>
#include <windowsx.h>
static char szAppName[] = "First Window";
#pragma argsused
int PASCAL WinMain ( HINSTANCE hInst,
HINSTANCE hPrevInstance,
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.