Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование в Windows API. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
12.08.2026
Размер:
752 Кб
Скачать

Министерство транспорта Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования «Российский университет транспорта (МИИТ)»

___________________________________________________

Институт пути, строительства и сооружений

Кафедра «Системы автоматизированного проектирования»

И.В. НЕСТЕРОВ, Э.Р. РЕЗНИКОВА, А.А. ЩЕРБАКОВ

ПРОГРАММИРОВАНИЕ В WINDOWS API

Учебное пособие

для студентов направления «Информатика и вычислительная техника»

Москва – 2017

УДК 004

Н 56

Нестеров И.В., Резникова Э.Р., Щербаков А.А. Программирование в Windows API: Учебное пособие. - М.:

РУТ (МИИТ), 2017. - 70 с.

В учебном пособии изложены основные принципы программирования в среде Microsoft Windows на языке C++ с применением Win32 API. Подробно рассмотрены функции, структуры и сообщения API, необходимые для построения Windows-приложений. Приведены примеры программ с подробными комментариями. Пособие предназначено для студентов, обучающихся по направлению «Информатика и вычислительная техника», изучающих дисциплину "Программирование".

Рецензенты:

Начальник отдела программного обеспечения ОАО «Институт Гипростроймост», кандидат технических наук О.А. Потапова

Доцент кафедры «Мосты и тоннели» РУТ (МИИТ), кандидат технических наук А.Н. Сонин

© РУТ (МИИТ), 2017

Оглавление

 

Введение ..................................................................................

4

1. Базовые типы данных в программах под Windows .........

7

2.Общая структура простого приложения под Windows 10

3.Функции и структуры API, необходимые для построения

Windows-приложения .......................................................

16

3.1

Функция WinMain .......................................................

16

3.2

Оконная функция ........................................................

17

3.3

Функция RegisterClassEx............................................

19

3.4

Функция UnregisterClass.............................................

23

3.5

Функция CreateWindow ..............................................

23

3.6

Функция ShowWindow ...............................................

29

3.7

Функция UpdateWindow .............................................

31

3.8

Функция GetMessage...................................................

31

3.9

Функция DispatchMessage ..........................................

32

3.10 Функция PostQuitMessage ........................................

33

4. Пример программы, создающей два окна с разными

 

классами и оконными функциями...................................

34

5. Организация вывода информации в окно с помощью

 

интерфейса графических устройств GDI........................

40

5.1. Правила обработки сообщения WM_PAINT.

 

Функции API для подготовки контекста устройства. 42

5.2

Правила использования объектов GDI. Некоторые

 

 

функции API для работы с объектами GDI. .............

46

5.3

Функции для вывода текста .......................................

55

5.4

Функции API рисования простых графических

 

 

примитивов ..................................................................

57

5.5

Задание цвета при работе с функциями

 

 

графического вывода ..................................................

58

5.6

Пример программы вывода простых графических

 

 

примитивов ..................................................................

61

5.7

Пример обработчика сообщения WM_PAINT .........

65

Литература .............................................................................

69

 

3

 

Введение

Application Programming Interface (API), или

Интерфейс прикладных программ (ИПП), представляет собой обширный набор функций, предоставляемых операционной системой прикладной программе, для выполнения базовых действий (управление дисковой и оперативной памятью, монитором, периферийными устройствами и т.п.).

Windows - многозадачная операционная система (ОС), обеспечивающая выполнение нескольких приложений одновременно, и оснащенная графическим пользовательским интерфейсом (ГПИ). Разработана корпорацией Microsoft в 1985 году для IBM-совместимых ПК. К настоящему времени существует большое количество версий различных лет выпуска и назначения.

Win API – программный интерфейс операционной системы Windows. Содержит функции для работы с памятью, файлами, сетью и др. Значительная часть функций предназначена для управления достаточно сложным многооконным пользовательским интерфейсом. Различные версии Windows содержат наборы функций API, которые имеют одинаковые по версиям имена, но различную внутреннюю реализацию. С эволюцией ОС в API добавляются новые функции, а некоторые функции объявляется устаревшими, но оставляются для совместимости.

Графический пользовательский интерфейс (ГПИ,

GUI) – стандартная среда взаимодействия пользователя с прикладной программой. Основная идея ГПИ, обеспечиваемого операционной системой, состоит в том, что при работе с множеством различных приложений пользователь имеет дело с единообразным набором элементов управления (кнопки, поля ввода, списки и др.), что существенно упрощает освоение и использование

4

новой прикладной программы. Первыми компьютерами, оснащёнными ГПИ, были Lisa (1980) и Macintosh (1984)

фирмы Apple.

Окно (Window) – базовый элемент ГПИ, представляет собой область экрана, предназначенную для отображения графической или текстовой информации и/или восприятия команд пользователя, поступающих от устройств ввода (клавиатура и мышь). Активным окном называется окно, имеющее в данный момент фокус ввода, т.е. принимающее поступающие от клавиатуры данные, в любой момент времени активным может быть только одно окно. ОС организует централизованное управление всеми окнами таким образом, что прикладная программа должна заботиться только о «своих» окнах. Прикладная программа, использующая ГПИ, содержит по меньшей мере одно окно. ОС позволяет достаточно широко варьировать свойства окон, что позволяет создавать сложные специализированные элементы ГПИ. Почти все элементы ГПИ (кнопки, поля, полосы прокрутки и т.п.) являются окнами. Окна могут располагаться на экране как самостоятельно, так и быть привязанными к другим (родительским) окнам. Стандартные диалоговые элементы могут располагаться только в пределах диалоговых оконоснований.

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

5

специальный класс окна и запрограммировать поведение окна этого типа.

Всего существует три типа классов окон:

1)системные (предопределённые), предоставляемые операционной системой, доступные всем приложениям;

2)прикладные глобальные классы, регистрируемые приложениями или библиотеками DLL, доступные всем приложениям;

3)прикладные локальные классы, регистрируемые приложением для внутреннего использования.

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

механизмом сообщений.

Сообщение – это числовой код, обозначающий определённое событие (например, перемещение мыши, нажатие клавиши, изменение состояния окна). Программа может принимать и передавать как стандартные сообщения, так и дополнительные специальные сообщения. Операционная система организует для каждого потока приложения системную очередь сообщений.

Приложение получает сообщение и дополнительные данные с помощью вызова функций API.

Оконная функция – функция специального формата, определяемая программистом для обработки сообщений ОС и реализации задач, которые должно выполнять приложение. Эта функция привязана к определённому классу окон и вызывается операционной системой для передачи сообщения окну данного класса.

6

1. Базовые типы данных в программах под

Windows

При программировании для Windows используется целый ряд специальных типов данных, условно их можно разделить на несколько видов: основные, дескрипторные, строковые и вспомогательные, а также структуры.

Основные типы данных

BOOL

аналогичен bool, также имеет два значения:

 

0 (FALSE) и 1 (TRUE), при использовании

 

WinAPI принято вместо 0 использовать

 

NULL

BYTE

байт, или 8-битное беззнаковое целое число,

 

аналог – unsigned char

DWORD

32-битное беззнаковое целое,

 

аналоги - unsigned long int, UINT

INT

32-битное целое, аналог – long int

LONG

32-битное целое

NULL

нулевой указатель

Дескрипторные типы данных

Дескриптор – это указатель, ссылка на объект, представляет собой 32-разрядное целое число, назначаемое операционной системой для идентификации объекта, располагаемого в физической памяти. Объектом может быть окно, дисковый файл, курсор мыши, шрифт, процесс, поток и др. Программный код получает доступ к объекту только через его дескриптор. Для разных типов объектов существуют разные дескрипторы.

Примечание: для удобства в WinAPI предусмотрены сокращения для типов данных. Первая буква H (от слова handle) дескриптор.

7

 

HANDLE

дескриптор объекта

 

 

 

 

 

HINSTANCE

дескриптор экземпляра приложения

 

 

 

 

 

HWND

дескриптор окна

 

 

 

 

 

HMENU

дескриптор меню

 

 

 

 

 

HDC

дескриптор контекста устройства

 

 

 

 

 

HGDIOBJ

дескриптор объекта GDI любого типа

 

 

 

 

 

HBRUSH

дескриптор кисти

 

 

 

 

 

HPEN

дескриптор пера

 

 

 

 

 

HFONT

дескриптор шрифта

 

 

 

 

 

HCURSOR

дескриптор курсора

 

 

 

 

Строковые типы данных

 

 

 

 

 

TCHAR

 

символьный тип, аналог char и wchar_t

 

LPCTSTR

 

указатель на константную строку (long

 

 

 

pointer constant TCHAR string)

 

LPCWSTR

 

указатель на константную UNICODE

 

 

 

строку

 

LPSTR

 

указатель на строку, заканчивающуюся

 

 

 

нулевым символом (long pointer string)

 

LPTSTR

 

указатель на строку (long pointer

 

 

 

TCHAR string)

 

LPWSTR

 

указатель на UNICODE строку (long

 

 

 

pointer wide character string)

Windows поддерживает работу с символами как в ANSI кодировке (однобайтовой), так и в кодировке UNICODE, где каждый символ кодируется двумя байтами. Для использования двухбайтовой кодировки необходимо:

-подключить библиотеку tchar.h;

-при определении символов и строк использовать типы

TCHAR, LPTSTR и LPCTSTR;

8

-при определении символьных или строковых констант использовать макрос _TEXT (или _T);

Например, вместо

char *name = "SAP-211";

следует записать:

LPCTSTR name = _T("SAP-211");

Вспомогательные типы

LRESULT

целое со знаком, значение,

 

возвращаемое оконной функцией

LPARAM

параметр сообщения (long parameter)

WPARAM

параметр сообщения (word parameter)

COLORREF

целочисленный код цвета (RGB)

Основные структуры

Структура – набор элементов данных различных типов, имеющий определённое имя. Позволяет компоновать сложные и многочисленные данные API в отдельные группы.

MSG

хранит информацию по сообщению

 

(координаты, клавиши, курсор)

WNDCLASSEX

определяет основные характеристики

 

окна

LOGFONT

хранит параметры логического

 

шрифта

POINT

хранит целочисленные координаты

 

точки на плоскости

SIZE

хранит значения ширины и высоты

 

битовых изображений, текста и др.

RECT

хранит экранные координаты

 

прямоугольной области

 

9

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

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

// Цикл обработки сообщений для DOS #include <stdio.h>

#include <conio.h>

void WndProc (int );

void main()

{int msg;

//цикл получения и передачи сообщений

//оконной функции

while ( (msg=getch()) != '0' )

WndProc (msg);

}

// Аналог оконной функции для DOS void WndProc (int msg)

{

switch (msg)

 

 

{

 

 

case 's':

printf("\nSAPR"); break;

case 'p':

printf("\nPGS");

break;

default :

printf("\n?");

break;

}

 

 

}

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]