Программирование графики для Windows

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Абсолютно новый, улучшенный сканКнига посвящена графическому программированию для Windows с использованием Win32 GDI API. Кроме того, в ней приведены начальные сведения о DirectDraw и краткое введение в непосредственный режим Direct3D. Рассматриваются стандартные возможности, поддерживаемые на всех платформах Win32, 32-разрядные возможности, реализованные только в Windows NT/2000, и новейшие расширения GDI, появившиеся только в Windows 2000 и Windows 98. В книге приведено множество фрагментов кода, подходящих для практического применения. Помимо простейших тестовых и демонстрационных программ, вы найдете в ней множество функций, классов C++, драйверов, утилит и нетривиальных программ, вполне подходящих для использования в коммерческих проектах.На компакт-диске находятся полные исходные тексты, файлы рабочих областей Microsoft Visual C++, заранее откомпилированные двоичные файлы (в отладочных и окончательных версиях) и файлы в формате JPEG для глав, посвященных графическим алгоритмам. Предыдущий вариант книги на сайте: org/

Author(s): Фень Юань
Publisher: Питер
Year: 2002

Language: Russian
Commentary: 1146122002-хор
Pages: 1074

Благодарности......Page \t21\t
Введение......Page \t22\t
О чем эта книга......Page \t23\t
Как организована эта книга......Page \t24\t
Как читать эту книгу......Page \t27\t
Что находится на компакт-диске......Page \t28\t
От издательства......Page \t29\t
Глава 1. Основные принципы и понятия......Page \t30\t
Основы программирования для Windows на C/C++......Page \t31\t
Hello World, версия 1: запуск браузера......Page \t32\t
Hello World, версия 2: вывод текста на рабочем столе......Page \t34\t
Hello, World, версия 3: создание полноэкранного окна......Page \t35\t
Hello, World, версия 4: вывод средствами DirectDraw......Page \t42\t
Ассемблер......Page \t46\t
Разработка и тестирование......Page \t50\t
Компиляторы......Page \t52\t
Microsoft Platform SDK......Page \t55\t
Microsoft Driver Development Kit......Page \t58\t
Microsoft Developer Network......Page \t59\t
Формат исполняемых файлов Win32......Page \t61\t
Каталог импорта......Page \t65\t
Каталог экспорта......Page \t69\t
Архитектура операционной системы Microsoft Windows......Page \t71\t
Микроядро......Page \t73\t
Драйверы устройств......Page \t74\t
Управление окнами и графическая система......Page \t76\t
Исполнительная часть......Page \t77\t
Системные функции......Page \t78\t
Системные процессы......Page \t79\t
Платформенные подсистемы......Page \t81\t
Примеры программ......Page \t82\t
Компоненты графической системы Windows......Page \t84\t
Мультимедиа......Page \t87\t
Video for Windows......Page \t88\t
OpenGL......Page \t89\t
Windows Media......Page \t91\t
Драйверы режима ядра......Page \t92\t
Архитектура GDI......Page \t93\t
Группы функций GDI......Page \t94\t
Вызовы системных функций GDI......Page \t97\t
От Win32 GDI API к системным функциям механизма GDI......Page \t98\t
Архитектура DirectX......Page \t99\t
Компоненты DirectX......Page \t100\t
Архитектура DirectDraw......Page \t102\t
Архитектура системы печати......Page \t105\t
Маршрутизатор спулера......Page \t108\t
Провайдер печати......Page \t109\t
Процессор печати......Page \t110\t
Языковой монитор и монитор порта......Page \t112\t
Процесс спулера изнутри......Page \t113\t
Графический механизм......Page \t114\t
Системные функции графического механизма......Page \t116\t
Механизм графической визуализации......Page \t118\t
Структуры данных графического механизма......Page \t120\t
Преобразование в примитивы......Page \t121\t
Шрифтовые драйверы......Page \t122\t
Драйвер видеопорта и мини-драйвер видеопорта......Page \t123\t
Инициализация драйвера экрана......Page \t124\t
Вывод на поверхность, перехват и возврат......Page \t125\t
Поддержка DirectDraw/Direct3D на уровне драйвера экрана......Page \t127\t
Драйверы принтеров......Page \t129\t
Управляющие драйверы принтеров от Microsoft......Page \t130\t
Графическая библиотека DLL драйвера принтера......Page \t131\t
Драйвер принтера для вывода документа HTML......Page \t134\t
Итоги......Page \t141\t
Примеры программ......Page \t142\t
Глава 3. Внутренние структуры данных GDI/DirectDraw......Page \t143\t
Класс и объект......Page \t144\t
Инкапсуляция и маскировка реализации......Page \t145\t
Указатели и манипуляторы......Page \t148\t
Табличное отображение......Page \t149\t
Когда манипулятора недостаточно......Page \t150\t
Расшифровка манипуляторов объектов GDI......Page \t151\t
Максимальное количество манипуляторов GDI на уровне процесса —12 000......Page \t153\t
Часть HGDIOBJ содержит тип объекта GDI......Page \t154\t
Поиск таблицы объектов GDI......Page \t156\t
Расшифровка таблицы объектов GDI......Page \t162\t
Поле nCount иногда используется как счетчик выбора объектов......Page \t166\t
Поле nProcess связывает манипулятор GDI с конкретным процессом......Page \t167\t
nUpper: дополнительная проверка......Page \t168\t
pUser: указатель на структуру данных пользовательского режима......Page \t169\t
Структура данных пользовательского режима для кистей: оптимизация создания однородных кистей......Page \t170\t
Структура данных пользовательского режима для регионов: оптимизация прямоугольных регионов......Page \t171\t
Структура данных пользовательского режима для контекста устройства: атрибуты......Page \t172\t
Обращение к адресному пространству режима ядра......Page \t177\t
WinDbg и расширение отладчика GDI......Page \t183\t
Структуры данных режима ядра......Page \t195\t
Типы объектов GDI в механизме GDI......Page \t196\t
Контекст устройства в механизме GDI......Page \t198\t
Структура PDEV в механизме GDI......Page \t202\t
Поверхности в механизме GDI......Page \t207\t
Аппаратно-зависимые растры в механизме GDI......Page \t210\t
DIB-секции в механизме GDI......Page \t211\t
Кисти в механизме GDI......Page \t212\t
Палитры в механизме GDI......Page \t214\t
Регионы в механизме GDI......Page \t216\t
Траектории в механизме GDI......Page \t220\t
Шрифты в механизме GDI......Page \t224\t
Структуры данных DirectDraw......Page \t231\t
Примеры программ......Page \t238\t
Глава 4. Мониторинг графической системы Windows......Page \t240\t
Отслеживание вызовов функций Win32 API......Page \t241\t
Построение программы мониторинга......Page \t242\t
Внедрение DLL-разведчика......Page \t243\t
Подключение к цепочке вызовов функций API......Page \t246\t
Сбор информации......Page \t248\t
Вывод данных......Page \t254\t
Управляющая программа......Page \t257\t
Файл определения GDI API......Page \t260\t
Декодер данных GDI......Page \t262\t
Полный мониторинг API......Page \t264\t
Таблица виртуальных функций......Page \t268\t
Определение DirectDraw API......Page \t269\t
Модификация таблицы виртуальных функций......Page \t270\t
Отслеживание системных вызовов GDI......Page \t271\t
Отслеживание интерфейса DDI......Page \t275\t
Итоги......Page \t279\t
Примеры программ......Page \t280\t
Современные видеоадаптеры......Page \t282\t
Кадровый буфер......Page \t283\t
Формат пикселов......Page \t286\t
Двойная буферизация, z-буфер и текстуры......Page \t290\t
Экранное устройство и перечисление режимов......Page \t293\t
Контекст устройства......Page \t296\t
Создание контекста устройства......Page \t298\t
Получение информации о возможностях устройства......Page \t299\t
Атрибуты в контексте устройства......Page \t304\t
Графический вывод в многооконной среде......Page \t307\t
Получение контекста устройства, связанного с окном......Page \t309\t
Классовый контекст устройства......Page \t313\t
Закрытый контекст устройства......Page \t314\t
Информационный контекст устройства......Page \t315\t
Метафайловый контекст устройства......Page \t316\t
Формальное представление контекста устройства......Page \t318\t
Пример: родовой класс рамочного окна......Page \t321\t
Класс панели инструментов......Page \t322\t
Класс холста......Page \t323\t
Класс рамочного окна......Page \t324\t
Тестовая программа......Page \t326\t
Обновляемый регион окна......Page \t328\t
Сообщение WM_PAINT......Page \t329\t
Наглядное представление сообщений перерисовки окна......Page \t331\t
Примеры программ......Page \t339\t
Глава 6. Системы координат и преобразования......Page \t340\t
Физическая система координат......Page \t341\t
Система координат устройства......Page \t343\t
Страничная система координат и режимы отображения......Page \t345\t
Режимы отображения MM_LOENGLISH и MM_HIENGLISH......Page \t348\t
Режимы отображения MM_LOMETRIC и MM_HIMETRIC......Page \t350\t
Режим отображения MM_ISOTROPIC......Page \t351\t
Режим отображения MM_ANISOTROPIC......Page \t352\t
Базовые точки окна и области просмотра......Page \t355\t
Мировая система координат......Page \t357\t
Аффинные преобразования......Page \t358\t
Функции мировых преобразований в Win32 API......Page \t361\t
Использование мировых преобразований......Page \t363\t
Использование систем координат......Page \t370\t
Реализация преобразований в GDI......Page \t372\t
Пример программы: прокрутка и масштабирование......Page \t373\t
Игра го в классе KScrollCanvas......Page \t377\t
Итоги......Page \t378\t
Примеры программ......Page \t379\t
Объекты GDI, манипуляторы и таблица объектов......Page \t380\t
Хранение объектов GDI......Page \t382\t
Таблица объектов GDI......Page \t383\t
Манипулятор объекта GDI......Page \t384\t
API объектов GDI......Page \t385\t
Обнаружение утечки объектов GDI......Page \t387\t
Конвейер отсечения......Page \t390\t
Простые регионы......Page \t391\t
Регион отсечения......Page \t392\t
Метарегион......Page \t396\t
Наглядное представление регионов в контексте устройства......Page \t398\t
Цвет......Page \t402\t
Цветовое пространство RGB......Page \t403\t
Цветовое пространство HLS......Page \t406\t
Индексируемые цвета и палитры......Page \t411\t
Вывод пикселов......Page \t415\t
Пример: множество Мандельброта......Page \t418\t
Примеры программ......Page \t421\t
Бинарные растровые операции......Page \t422\t
Режим заполнения фона и цвет фона......Page \t426\t
Объект логического пера......Page \t427\t
Стандартные перья......Page \t429\t
Простые перья......Page \t430\t
Расширенные перья......Page \t433\t
Получение информации о логических перьях......Page \t439\t
Класс для работы с объектами перьев GDI......Page \t440\t
Линии......Page \t442\t
Кривые Безье......Page \t447\t
PolyDraw......Page \t451\t
Альтернативное определение кривых Безье......Page \t453\t
Дуги......Page \t454\t
Определение дуги в градусах: функция AngleArc......Page \t455\t
Рисование дуг пером со стилем PSJNSIDEFRAME......Page \t456\t
Преобразование дуг в кривые Безье......Page \t457\t
Построение траектории......Page \t461\t
Получение информации о траектории......Page \t463\t
Преобразование объекта траектории......Page \t467\t
Графические операции с использованием траекторий......Page \t471\t
Пример: рисование нестандартных стилевых линий......Page \t473\t
Итоги......Page \t477\t
Пример программы......Page \t478\t
Объект логической кисти......Page \t479\t
Стандартные кисти......Page \t480\t
Пользовательские кисти......Page \t481\t
Кисти системных цветов......Page \t488\t
Структура LOGBRUSH......Page \t489\t
Прямоугольник как структура данных......Page \t490\t
Рисование прямоугольников......Page \t492\t
Прорисовка границ и элементов управления......Page \t495\t
Эллипсы, секторы, сегменты и закругленные прямоугольники......Page \t497\t
Многоугольники......Page \t500\t
Режим заполнения многоугольников......Page \t501\t
Замкнутые траектории......Page \t504\t
Регионы......Page \t506\t
Создание объекта региона......Page \t507\t
Операции с объектами регионов......Page \t510\t
Прорисовка регионов......Page \t521\t
Градиентные заливки......Page \t523\t
Градиентная заливка прямоугольников......Page \t525\t
Применение градиентных заливок для создания объемных кнопок......Page \t527\t
Полупрозрачная заливка......Page \t528\t
Реализация градиентных заливок в цветовом пространстве HLS......Page \t529\t
Радиальные градиентные заливки......Page \t530\t
Узорные заливки......Page \t532\t
Итоги......Page \t533\t
Пример программы......Page \t534\t
Аппаратно-независимые растры......Page \t535\t
Файловый формат BMP......Page \t536\t
Упакованный аппаратно-независимый растр......Page \t545\t
Класс для работы с DIB......Page \t546\t
Исходный прямоугольник......Page \t556\t
Приемный прямоугольник и режимы масштабирования......Page \t557\t
Растровая операция......Page \t559\t
Пример использования функции StretchDIBits......Page \t560\t
SetDIBitsToDevice......Page \t561\t
Совместимые контексты устройств......Page \t563\t
Аппаратно-зависимые растры......Page \t564\t
CreateBltmap......Page \t565\t
CreateBitmapIndirect......Page \t566\t
CreateCompatibleBitmap и CreateDiscardableBitmap......Page \t567\t
CreateDIBitmap......Page \t569\t
LoadBitmap......Page \t570\t
Копирование растров между форматами DIB и DDB......Page \t571\t
Прямой доступ к массиву пикселов DDB......Page \t575\t
Отображение DDB-растров......Page \t576\t
Использование растров в меню......Page \t584\t
Использование растра в качестве фона окна......Page \t589\t
CreateDIBSection......Page \t594\t
Класс для работы с DIB-секциями......Page \t596\t
Функции GetObjectType и GetObject для DIB-секций......Page \t598\t
GetDIBColorTable и SetDIBColorTable......Page \t599\t
Применение DIB-секций: аппаратно-независимый вывод......Page \t600\t
Применение DIB-секций: вывод в высоком разрешении......Page \t603\t
Примеры программ......Page \t607\t
Тернарные растровые операции......Page \t608\t
Коды растровых операций......Page \t609\t
Диаграмма тернарных растровых операций......Page \t612\t
Часто используемые растровые операции......Page \t614\t
Прозрачные растры......Page \t627\t
Функция PlgBIt......Page \t628\t
Кватернарные растровые операции: MaskBIt......Page \t635\t
Цветовые ключи: TransparentBIt......Page \t640\t
Прозрачный вывод с использованием геометрических фигур......Page \t644\t
Прозрачный вывод с использованием отсечения......Page \t646\t
Предварительная подготовка изображений......Page \t647\t
Альфа-наложение......Page \t649\t
Пример альфа-наложения с постоянным коэффициентом......Page \t652\t
Прозрачные окна......Page \t653\t
Альфа-канал: класс AirBrush......Page \t655\t
Имитация альфа-наложения......Page \t659\t
Примеры программ......Page \t661\t
Глава 12. Графические алгоритмы и растры Windows .......Page \t663\t
Прямой доступ к пикселам......Page \t664\t
Аффинные преобразования растров......Page \t667\t
Быстрые специализированные преобразования растров......Page \t670\t
Преобразования цветов......Page \t672\t
Преобразование растров в оттенки серого......Page \t675\t
Гамма-коррекция......Page \t676\t
Родовой класс преобразований пикселов......Page \t678\t
Родовой класс цветоделения......Page \t682\t
Пример выделения каналов......Page \t684\t
Пространственные фильтры......Page \t686\t
Фильтры сглаживания и резкости......Page \t691\t
Выделение границ и рельеф......Page \t692\t
Морфологические фильтры......Page \t693\t
Итоги......Page \t695\t
Примеры программ......Page \t696\t
Системная палитра......Page \t697\t
Параметры экрана......Page \t698\t
Получение системной палитры......Page \t699\t
Статические цвета......Page \t702\t
Логическая палитра......Page \t704\t
Палитра по умолчанию......Page \t705\t
Полутоновая палитра......Page \t706\t
Создание специализированной палитры......Page \t708\t
WM_QUERYNEWPALETTE......Page \t710\t
WM_PALETTECHANGED......Page \t711\t
Тестовая программа......Page \t712\t
Палитра и растры......Page \t716\t
Аппаратно-зависимые растры и палитры......Page \t717\t
Аппаратно-независимые растры и палитры......Page \t720\t
Индекс палитры в цветовой таблице DIB......Page \t723\t
DIB-секции и палитра......Page \t725\t
Квантование цветов......Page \t726\t
Сокращение цветовой глубины растра......Page \t736\t
Итоги......Page \t742\t
Пример программы......Page \t743\t
Глава 14. Шрифты......Page \t744\t
Наборы символов и кодировки......Page \t745\t
Глифы......Page \t751\t
Шрифт......Page \t753\t
Семейство шрифтов и начертание......Page \t754\t
Растровые шрифты......Page \t758\t
Векторные шрифты......Page \t762\t
Формат файлов шрифтов TrueType......Page \t765\t
Заголовок шрифта......Page \t768\t
Максимальный профиль......Page \t769\t
Отображение символов в индексы глифов......Page \t770\t
Индексная таблица......Page \t772\t
Данные глифов......Page \t773\t
Инструкции глифа......Page \t781\t
Горизонтальные метрики......Page \t786\t
Кернинг......Page \t789\t
Метрики OS/2 и Windows......Page \t790\t
Другие таблицы......Page \t791\t
Коллекции TrueType......Page \t792\t
Ресурсные файлы шрифтов......Page \t793\t
Установка закрытых шрифтов и шрифтов Multiple Master OpenType......Page \t794\t
Внедрение шрифтов......Page \t795\t
Системная таблица шрифтов......Page \t799\t
Примеры программ......Page \t800\t
Логические шрифты......Page \t801\t
Метрики шрифтов в Windows......Page \t802\t
Стандартные шрифты......Page \t804\t
Создание логических шрифтов......Page \t805\t
Подстановка шрифта......Page \t810\t
Система подстановки шрифтов PANOSE......Page \t811\t
Получение информации о логическом шрифте......Page \t817\t
Метрики растровых и векторных шрифтов......Page \t819\t
Метрики шрифтов TrueType/OpenType......Page \t822\t
Точность шрифтовых метрик......Page \t827\t
Выравнивание текста......Page \t833\t
Вывод текста справа налево......Page \t836\t
Дополнительные интервалы......Page \t839\t
Ширина символа......Page \t841\t
Преобразование символов в глифы......Page \t846\t
Кернинг......Page \t847\t
Расположение символов......Page \t848\t
Функция ExtTextOut......Page \t850\t
Uniscribe......Page \t854\t
Доступ к данным глифов......Page \t855\t
Вывод текста с табуляцией......Page \t864\t
Простое абзацное форматирование......Page \t866\t
Аппаратно-независимое форматирование текста......Page \t868\t
Эффекты при выводе текста......Page \t871\t
Цвет текста......Page \t872\t
Начертания......Page \t875\t
Геометрические эффекты......Page \t877\t
Работа с текстом в растровом формате......Page \t882\t
Текст как совокупность кривых......Page \t888\t
Текст как регион......Page \t894\t
Итоги......Page \t895\t
Пример программы......Page \t896\t
Общие сведения о метафайлах......Page \t897\t
Создание расширенного метафайла......Page \t898\t
Воспроизведение расширенного метафайла......Page \t900\t
Получение информации о расширенном метафайле......Page \t903\t
Передача расширенных метафайлов......Page \t907\t
Строение расширенных метафайлов......Page \t911\t
Записи EMF......Page \t912\t
Классификация типов записей EMF......Page \t914\t
Расшифровка записей EMF......Page \t916\t
Простые объекты GDI в EMF......Page \t918\t
Растры в EMF......Page \t919\t
Регионы в EMF......Page \t921\t
Палитры в EMF......Page \t922\t
Системы координат в EMF......Page \t924\t
Команды вывода в EMF......Page \t926\t
Аппаратная независимость EMF......Page \t929\t
Перечисление записей EMF......Page \t930\t
Класс C++ для перечисления записей EMF......Page \t931\t
Замедленное воспроизведение EMF......Page \t932\t
Трассировка воспроизведения EMF......Page \t933\t
Динамическое изменение EMF......Page \t935\t
Построение производных метафайлов......Page \t937\t
Декомпилятор EMF......Page \t941\t
Сохранение EMF-файла спулера......Page \t943\t
Итоги......Page \t945\t
Примеры программ......Page \t946\t
Знакомство со спулером......Page \t947\t
Процесс печати......Page \t948\t
Язык управления принтером......Page \t949\t
Прямой вывод в порт......Page \t952\t
Печать с использованием спулера......Page \t954\t
Процессор печати EMF......Page \t958\t
Перечисление принтеров......Page \t959\t
Настройка драйвера принтера......Page \t961\t
Стандартные диалоговые окна печати......Page \t965\t
Создание контекста устройства принтера......Page \t971\t
Получение информации о контексте устройства принтера......Page \t973\t
Последовательность формирования заданий печати......Page \t975\t
Единая логическая система координат......Page \t978\t
Имитация внешнего вида страницы......Page \t981\t
Одновременный вывод страниц......Page \t982\t
Печать нескольких страниц на одном листе......Page \t983\t
Родовой класс печати......Page \t984\t
Единицы измерения......Page \t989\t
Текст......Page \t990\t
Печать графики в формате JPEG......Page \t993\t
Итоги......Page \t998\t
Примеры программ......Page \t999\t
Глава 18. DirectDraw и непосредственный режим Direct3D......Page \t1000\t
СОМ-интерфейсы......Page \t1001\t
СОМ-классы......Page \t1002\t
HRESULT......Page \t1004\t
DirectX и СОМ......Page \t1005\t
Общие сведения о DirectDraw......Page \t1007\t
Интерфейс IDirectDraw7......Page \t1008\t
Интерфейс IDirectDrawSurface7......Page \t1010\t
Вывод на поверхности DirectDraw......Page \t1014\t
Подбор цветов......Page \t1018\t
Интерфейс IDirectDrawClipper......Page \t1020\t
Простое окно DirectDraw......Page \t1021\t
Построение графической библиотеки DirectDraw......Page \t1023\t
Вывод пикселов......Page \t1024\t
Вывод линий......Page \t1026\t
Заливка замкнутых областей......Page \t1029\t
Отсечение......Page \t1031\t
Внеэкранные поверхности......Page \t1033\t
Шрифт и текст......Page \t1035\t
Спрайты......Page \t1039\t
Непосредственный режим Direct3D......Page \t1043\t
Подготовка среды непосредственного режима Direct3D......Page \t1044\t
Изменение размеров окна......Page \t1047\t
Двухэтапный вывод......Page \t1048\t
Использование Direct3D в окне......Page \t1049\t
Текстурные поверхности......Page \t1050\t
Пример использования непосредственного режима Direct3D......Page \t1052\t
Итоги......Page \t1055\t
Примеры программ......Page \t1056\t
Алфавитный указатель......Page \t1058\t