Н. А. Литвиненко



Pdf просмотр
страница1/15
Дата28.11.2016
Размер8.29 Mb.
Просмотров1308
Скачиваний1
  1   2   3   4   5   6   7   8   9   ...   15


Н. А.

Литвиненко






Рекомендовано Государственным образовательным учреждением высшего профессионального образования
«Санкт
-
Петербургский государственный университет информационных технологий, механики и оптики» в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлениям подготовки «Информационные системы»,
«Информатика и вычислительная техника».
Регистрационный номер рецензии 466 от 10.09.2009 г. МГУП




Санкт-Петербург
«БХВ-Петербург»
2010


УДК 681.3.068+800С++(075.8)
ББК 32.973.26-018.1я73
Л64

Литвиненко Н. А.
Л64
Технология программирования на С++. Win32 API-приложения. —
СПб.: БХВ-Петербург, 2010. — 288 с.: ил. — (Учебное пособие)
ISBN 978-5-9775-0600-7

Изложен начальный курс низкоуровневого программирования на C++ для Windows с использованием библиотеки Win32 API. Рассмотрены графический интерфейс Windows- приложения, стандартные диалоговые окна, элементы управления, растровая графика,
DLL-библиотеки, процессы и потоки. Материал иллюстрирован многочисленными при- мерами, выполненными в Visual Studio 2010 под управлением Windows 7.
Для студентов и преподавателей технических вузов и самообразования

УДК 681.3.068+800С++(075.8)
ББК 32.973.26-018.1я73


Группа подготовки издания:

Главный редактор
Екатерина Кондукова
Зам. главного редактора
Евгений Рыбаков
Зав. редакцией
Григорий Добин
Редактор
Юрий Рожко
Компьютерная верстка
Натальи Караваевой
Корректор
Наталия Першакова
Дизайн серии
Инны Тачиной
Оформление обложки
Елены Беляевой
Зав. производством
Николай Тверских


Лицензия ИД № 02429 от 24.07.00. Подписано в печать 29.06.10.
Формат 70 100 1
/
16

Печать офсетная. Усл. печ. л. 23,22.
Тираж 1000 экз. Заказ №
"БХВ
-
Петербург", 190005, Санкт
-
Петербург, Измайловский пр., 29.
Санитарно
- эпидемиологическое заключение на продукцию
№ 77.99.60.953.Д.00 5770.05.09 от
26.05.2009 г. выдано Федеральной службой по надзору в сфере защиты прав потребителей и благополучия человека
Отпечатано с готовых диапозитивов в ГУП "Типография "Наука"
199034, Санкт-Петербург, 9 линия, 12.

ISBN 978-5-9775-0600-7

© Литвиненко Н. А., 2010
© Оформление, издательство "БХВ-Петербург", 2010



Оглавление



Введение ............................................................................................................................ 1
Глава 1. Интерфейс Windows-приложения ................................................................ 3
Каркас Windows-приложения .......................................................................................... 4
Исследование каркаса Windows-приложения ............................................................ 9
Стандартная заготовка Windows-приложения ......................................................... 15
Обработка сообщений .................................................................................................... 21
Нажатие клавиши ........................................................................................................ 21
Сообщение мыши ........................................................................................................ 25
Создание окна .............................................................................................................. 27
Таймер .......................................................................................................................... 27
Рисование в окне ............................................................................................................. 29
Рисование линии .......................................................................................................... 29
Прямоугольники, регионы и пути ................................................................................. 46
Прямоугольники .......................................................................................................... 46
Регионы ........................................................................................................................ 47
Пути .............................................................................................................................. 50
Области отсечения ...................................................................................................... 52
Вывод текста.................................................................................................................... 53
Цвет текста и фона ...................................................................................................... 53
Получение метрики текста ......................................................................................... 54
Определение длины строки ........................................................................................ 55
Системные шрифты .................................................................................................... 56
Определение произвольных шрифтов ....................................................................... 57
Диалог с пользователем ................................................................................................. 59
Окно сообщений .......................................................................................................... 60
Меню ............................................................................................................................ 61
Пример интерактивной графики ................................................................................... 63
Вопросы к главе .............................................................................................................. 68
Задания для самостоятельной работы ........................................................................... 69

Оглавление

IV
Глава 2. Работа с файлами .......................................................................................... 71
Диалог выбора файлов ................................................................................................... 71
Простой просмотрщик файлов ...................................................................................... 72
Организация скроллинга ................................................................................................ 78
Панель инструментов ..................................................................................................... 85
Выбор шрифтов ............................................................................................................... 89
Чтение и запись файлов в библиотеке Win32 API ....................................................... 96
Вопросы к главе ............................................................................................................ 100
Задания для самостоятельной работы ......................................................................... 100
Глава 3. Окна и элементы управления .................................................................. 103
Дочерние окна ............................................................................................................... 104
Всплывающие окна ....................................................................................................... 109
Диалоговые окна ........................................................................................................... 116
Тестирование элементов управления ...................................................................... 118
Общие элементы управления ................................................................................... 128
Окно редактирования ................................................................................................ 134
Строка состояния ....................................................................................................... 140
Простой текстовый редактор на элементе управления Edit Box Control ............. 141
Немодальные окна ........................................................................................................ 148
Стандартное диалоговое окно выбора цвета .......................................................... 152
Вопросы к главе ............................................................................................................ 155
Задания для самостоятельной работы ......................................................................... 156
Глава 4. Растровая графика ..................................................................................... 157
Функция BitBlt() ............................................................................................................ 157
Вывод изображения в заданный прямоугольник ................................................... 160
Загрузка изображения из файла ............................................................................... 161
Растровые операции .................................................................................................. 164
Анимация ................................................................................................................... 167
Функция PlgBlt() ........................................................................................................... 172
Функция MaskBlt() ........................................................................................................ 177
Вращение графического образа ................................................................................... 180
Виртуальное окно ......................................................................................................... 183
Метафайлы .................................................................................................................... 187
Создание дискового файла ....................................................................................... 190
Растровое изображение в метафайле ....................................................................... 190
Расширенные метафайлы ......................................................................................... 192
Вопросы к главе ............................................................................................................ 196
Задания для самостоятельной работы ......................................................................... 196

Оглавление

V
Глава 5. Библиотеки динамической компоновки DLL ....................................... 197
Создание DLL ................................................................................................................ 197
Использование DLL ...................................................................................................... 199
Неявное связывание .................................................................................................. 199
DLL общего использования ..................................................................................... 202
Явная загрузка DLL ................................................................................................... 204
Загрузка ресурсов из DLL ......................................................................................... 207
Вопросы к главе ............................................................................................................ 210
Задания для самостоятельной работы ......................................................................... 210
Глава 6. Процессы и потоки ..................................................................................... 211
Создание процесса ........................................................................................................ 211
Создание потока ............................................................................................................ 216
Функции С++ для создания и завершения потока ................................................. 219
Измерение времени работы потока ......................................................................... 220
Высокоточное измерение времени .......................................................................... 223
Приоритеты потоков ..................................................................................................... 225
Синхронизация потоков в пользовательском режиме ............................................... 228
Interlocked-функции .................................................................................................. 228
Критические секции (critical section) ....................................................................... 230
Синхронизация с использованием объектов ядра ..................................................... 232
Семафоры ................................................................................................................... 233
События ...................................................................................................................... 238
Мьютексы ................................................................................................................... 241
Ожидаемые таймеры ................................................................................................. 242
Обмен данными между процессами ............................................................................ 247
Разделяемая память для нескольких экземпляров exe-файла ............................... 247
Файлы, проецируемые в память ............................................................................... 249
Совместный доступ к данным нескольких процессов ........................................... 256
Передача данных через сообщение ......................................................................... 260
Вопросы к главе ............................................................................................................ 264
Задания для самостоятельной работы ......................................................................... 265
Приложение. Поиск окна........................................................................................... 267
Поиск всех окон, зарегистрированных в системе ...................................................... 267
Поиск главного окна созданного процесса ................................................................ 269
Литература ................................................................................................................... 273
Дополнительная литература .................................................................................... 273
Предметный указатель .............................................................................................. 275



Введение


Данное учебное пособие продолжает курс "Технология программирования на С++.
Начальный курс", изданного в 2005 году издательством "БХВ-Петербург", и пред- назначено для студентов технических вузов, обучающихся по специальностям "Информационные системы", "Информатика и вычислительная техника", осваи- вающих программирование на языке С++. При изучении данного курса требуется знание языка С++ на уровне консольных приложений. Необходимо также знание библиотеки STL (от англ. Standard Template Library).
Учебное пособие является начальным курсом низкоуровневого программирования под Windows с использованием библиотеки Программного интерфейса приложе-
ний (Application Program Interface, API), точнее, ее 32-разрядного подмножества
Win32 API, и построено на основе курса лекций, более 5 лет читаемых студентам специальностей "Программное обеспечение вычислительной техники и автомати- зированных систем" и "Информационные системы и технологии". Это накладывает определенный отпечаток на стиль изложения и объем рассмотренного материала.
Курс построен на типовых задачах таким образом, что новые задачи рассматрива- ются по нарастающей сложности, а необходимые понятия вводятся по мере изло- жения. Для освоения материала необходимо выполнить все рассматриваемые при- меры и решить большую часть заданий для самостоятельной работы. Все примеры протестированы в среде Visual Studio 2010 Release Candidate и операционной сис- теме Windows 7, но работают и в Visual Studio 2005/2008 под управлением опера- ционных систем Windows 2000, XP, Vista.
Несмотря на повсеместное внедрение NET-технологий, автор считает, что для про- фессионального освоения программирования под Windows необходимо начинать с "низкого" уровня, т. е. с библиотеки Win32 API. Следует признать, что учебников, посвященных низкоуровневому программированию для Windows, издается недос- таточно. До сих пор не потеряли актуальность ставшие уже классическими курсы
Ч. Педзольда, Г. Шилда, У. Мюррея [1—3], изданные в середине 90-х годов. Из литературы последнего времени нужно отметить фундаментальный труд
Дж. Рихтера [4], достаточно объемную книгу Ю. А. Шупака [5], неплохой, но, к сожалению, неполный справочник Р. Д. Верма [6], а также учебное пособие
В. Г. Давыдова, в котором автор осуществил попытку параллельного изложения низкоуровневого программирования в Win32 API и программирования с использо- ванием библиотеки MFC (Microsoft Foundation Classes).
Книга состоит из шести глав.

Глава 1. "Интерфейс Windows-приложения" — рассматривает скелет Windows- приложения, обработку сообщений, вывод текста и простейшую графику.

Введение

2

Глава 2. "Работа с файлами" — на примере задачи построения программы для просмотра (просмотрщика) текстовых файлов рассматриваются стандартные диалоги: выбора имени файла, выбора шрифта, а также организация скроллинга.

Глава 3. "Окна и элементы управления" — рассматривается техника создания дочерних и всплывающих окон, а также диалоговые окна как контейнеры для стандартных и общих элементов управления.

Глава 4. "Растровая графика" — на многочисленных примерах показана мето- дика вывода в окно растровых изображений. Рассматриваются виртуальные ок- на и метафайлы.

Глава 5. "Библиотеки динамической компоновки DLL" — показана техника соз- дания пользовательских динамических библиотек, их использование при явном и неявном связывании.

Глава 6. "Процессы и потоки" — рассматриваются вопросы создания процессов и потоков, механизмы их синхронизации, объекты ядра и обмен данными между процессами.
При построении примеров возникает вопрос, в какой кодировке работать? Дело в том, что сейчас большинство проектов разрабатывается в Unicode-кодировке, где каждому символу выделяется 16 бит (под кириллицу выделены коды в диапазоне
0x400—0x4ff). Visual Studio позволяет работать и в традиционной для Windows однобайтной кодировке (для России кодовая страница CP-1251). Однако многие современные API-функции, даже принимающие строку в однобайтной кодировке, вынуждены преобразовывать ее в кодировку Unicode, поэтому для повышения эф- фективности рекомендуется изначально разрабатывать проект в Unicode.
Мы будем, по возможности, разрабатывать универсальный проект, который можно компилировать как в кодировке Unicode, так и в однобайтной Windows-кодировке.
Для этого будем пользоваться определениями, размещенными в файле включений tchar.h
, где в зависимости от выбранной кодировки происходит переопределение функций. Например, если использовать функцию
_tcslen()
, то в однобайтной ко- дировке ее имя преобразуется в strlen()
, если же выбрана Unicode-кодировка (оп- ределена константа
_UNICODE
), имя преобразуется в wcslen()
. Вот так это сделано в файле включений tchar.h
:
#ifdef _UNICODE
#define _tcslen wcslen
#else
#define _tcslen strlen
#endif /* _UNICODE */
Большая часть API-функций также имеет две реализации: с суффиксом "
A
" для од- нобайтной кодировки и "
W
" — для Unicode, например
TextOutA()
или
TextOutW()




Глава 1

Интерфейс
Windows-
приложения


Стиль программирования Windows-приложений принципиально отличается от то- го, который сложился в операционных системах раннего поколения. В MS-DOS программа монопольно владеет всеми ресурсами системы и является инициатором взаимодействия с операционной системой. Совсем иначе дело обстоит в операци- онной системе Windows, которая строилась как многозадачная, и именно операци- онная система является инициатором обращения к программе. Все ресурсы Win- dows являются разделяемыми, и программа, в дальнейшем будем называть ее
приложением, не может владеть ими монопольно. В связи с такой идеологией по- строения операционной системы приложение должно ждать посылки сообщения операционной системы и лишь после его получения выполнить определенные дей- ствия, затем вновь перейти в режим ожидания очередного сообщения. На рис. 1.1 схематично изображена диаграмма типичного Windows-приложения.

Рис.
1.1.
Структура
Windows- приложения

Глава 1

4
Windows генерирует множество различных сообщений, которые направляются прило- жению, например, щелчок кнопки мыши или нажатие клавиши на клавиатуре. Если приложение не обрабатывает какие-то сообщения, реакция на них осуществляется опе- рационной системой стандартным способом, так что задачей программиста является обработка лишь тех сообщений, которые необходимы приложению.
Разработчиками операционной системы Windows была создана библиотека функ- ций, при помощи которых и происходит взаимодействие приложения с операцион- ной системой, так называемые функции Программного интерфейса приложений
(Application Program Interface, API).
Подмножество этих функций, предназначенных для графического вывода на дис- плей, графопостроитель и принтер, представляет собой Интерфейс графических
устройств (Graphics Device Interface, GDI).
Библиотека API-функций разрабатывалась в расчете на то, что ее можно использо- вать для любого языка программирования, а поскольку разные языки имеют различ- ные типы данных, то были созданы собственные Windows-типы, которые приво- дятся к типам данных языков программирования. Отметим только, что в Windows нет логического типа bool
, но есть Windows-тип
BOOL
, который эквивалентен цело- му типу int
. Будем рассматривать типы данных Windows по мере необходимости.
Еще одной особенностью API-функций является использование обратного, по от- ношению к принятому в языке С, порядка передачи параметров, как это реализова- но в языке Pascal. В С для идентификации таких функций использовалось служеб- ное слово pascal
, в Windows введены его синонимы
CALLBACK
,
APIENTRY
или
WINAPI
. По умолчанию С-функции передают параметры, начиная с конца списка так, что первый параметр всегда находится на вершине стека. Именно это позволя- ет использовать в языке С функции с переменным числом параметров, что в API- функциях невозможно.


Поделитесь с Вашими друзьями:
  1   2   3   4   5   6   7   8   9   ...   15


База данных защищена авторским правом ©nethash.ru 2017
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал