- •История Windows
- •Windows 1.0
- •Windows 1.3
- •Windows 2.0
- •Windows 3.0
- •Windows 3.1
- •Windows for Workgroups версии 3.11
- •Windows NT
- •Windows 95
- •Windows NT Workstation 4.0 и Windows NT Server 4.0
- •Windows NT 4.0 Server Enterprise Edition
- •Windows 98
- •Windows 98 Second Edition (SE)
- •Windows 2000
- •Windows 98 Millenium Edition (ME)
- •Windows XP
- •Общая архитектура WINDOWS приложения.
- •Каркас приложения
- •Регистрация класса окна
- •Создание окна.
- •Отображение окна.
- •Цикл обработки очереди сообщений.
- •WndProc
- •Обработка сообщений типового приложения.
- •Контрольные вопросы
- •Сообщения
- •Типы сообщений
- •Обработка клавиатурных сообщений
- •Обработка сообщений от мыши
- •Сообщения таймера
- •Контрольные вопросы
- •Организация ввода
- •Разупорядоченный ввод
- •Разделение потоками виртуальных очередей ввода
- •Локальное состояние ввода
- •Ввод с клавиатуры и фокус
- •Управление курсором мыши
- •Контрольные вопросы
- •Окна
- •Окна Windows
- •Иерархия окон
- •Оконная процедура, стандартные оконные процедуры
- •Стиль класса окна
- •Стили окон, окна основных стилей
- •Перекрывающиеся окна
- •Временные окна
- •Дочерние окна
- •Сообщения управления окнами
- •Окна с полосами прокрутки
- •Системные метрики
- •Определение размера окна
- •Определение расположения окна
- •Контрольные вопросы
- •Графический интерфейс устройств(GDI).
- •Создание (получение) контекста устройств.
- •Сохранение контекста устройства.
- •Прямые (отрезки) и кривые
- •Закрашенные области
- •Битовые шаблоны (растровые шаблоны, растровые образы)
- •Текст и шрифты
- •Режимы масштабирования и преобразования
- •Метафайл
- •Регионы
- •Путь
- •Палитры
- •Контрольные вопросы
- •Объекты ядра
- •Что такое объект ядра
- •Учет пользователей объектов ядра
- •Защита
- •Таблица описателей объектов ядра
- •Создание объекта ядра
- •Закрытие объекта ядра
- •Синхронизация объектов
- •Именованные объекты
- •Дублирование описателей объектов
- •Изменение флагов описателя
- •Синхронизация потоков
- •Критическая секция
- •Мьютексы
- •Семафоры
- •События
- •Ожидаемые таймеры
- •Контрольные вопросы
- •Ресурсы Windows приложения
- •Файлы ресурсов приложения
- •Значки (пиктограммы)
- •Курсоры
- •Битовые образы
- •Символьные строки
- •Ресурсы, определяемые пользователем
- •Таблица акселераторов
- •Меню
- •Диалоговые окна
- •Контрольные вопросы
- •Элементы управления
- •Дочерние окна управления
- •Создание дочерних окон
- •Сообщения дочерних окон родительскому окну
- •Сообщения родительского окна дочерним окнам
- •Дочерние окна и фокус ввода
- •Дочерние окна управления и цвет
- •Кнопки различных стилей (класс BUTTON)
- •Нажимаемые кнопки
- •Флажки-переключатели
- •Переключатели
- •Окна групп
- •Кнопки, определяемые пользователем
- •Статические поля (класс static)
- •Текстовые редакторы (класс edit)
- •Списки разных стилей (класс listbox)
- •Комбинированные списки (класс combobox)
- •Полосы прокрутки (класс scrollbar)
- •Контрольные вопросы
- •Расширенные элементы управления
- •Основы общих элементов управления
- •Инициализация библиотеки элементов общего пользования
- •Создание элементов управления общего пользования
- •Посылка сообщений общим элементам управления
- •Уведомляющие сообщения от общих элементов управления
- •Контрольные вопросы
- •Стандартные диалоговые окна.
- •Окна сообщений
- •Диалоговые окна общего пользования
- •Контрольные вопросы
- •Динамически подключаемые библиотеки
- •Создание DLL
- •Проецирование DLL на адресное пространство процесса
- •Функция входа/выхода
- •Функция DllMain и стандартная библиотека С
- •Функция LibEntry
- •Функция LibMain
- •Функция WEP
- •Экспорт функций и переменных из DLL
- •Импорт функций и переменных из DLL
- •Заголовочный файл DLL
- •Разделы в ЕХЕ- и DLL-файлах
- •Контрольные вопросы
- •Файлы, проецируемые в память
- •Контрольные вопросы
- •Классы, определяющие архитектуру приложения
- •Классы приложения и поддержки потоков
- •Классы приложения и потоков
- •Классы фреймов окон
- •Получение информации о приложении
- •Соглашения об именах MFC
- •Включаемые файлы
- •Функция WinMain
- •Класс CWinApp
- •Класс CWnd
- •Класс CFrameWnd
- •Создание главного окна SDI-приложения
- •Примечание
- •Создание главного окна SDI-приложения
- •Создание дочерних окон
- •Ограничение размеров окна
- •Ограничение доступа к окну
- •Создание многодокументных приложений
- •Класс CMDIChildWnd
- •MDI — пример приложения
- •Категории сообщений
- •Карта сообщений
- •Компоненты карты сообщений
- •Класс CCmdTarget
- •Стандартный маршрут команды
- •Команды обновления и класс CCmdlll
- •Функции для работы с сообщениями
- •Основные положения
- •Класс CDocTemplate
- •Класс CSingleDocTemplate
- •Роль фреймов в архитектуре "документ/представление"
- •Документ и его представления
- •Документы
- •Класс CDocument
- •Класс CArchive
- •Представления
- •Класс CView
- •Панели элементов управления
- •Класс CStatusBar
- •Класс CStatusBarCtrl
- •Класс CDialogBar
- •ControlBars — пример приложения
- •НЕКОТОРЫЕ КЛАССЫ MFC
- •Класс CObject - основной класс MFC
- •Конструкторы класса
- •Оператор присваивания
- •Диагностика
- •Проверка целостности объектов класса
- •Получение дампа объекта класса
- •Сохранение и восстановление состояния объекта
- •Метод IsSerializable
- •Виртуальный метод Serialize
- •Информация о классе
- •Виртуальный метод GetRuntimeClass
- •Метод IsKindOf
- •Класс CPoint - точка на плоскости
- •Класс CSize - относительные координаты
- •Класс CString - текстовые строки
- •Конструктор класса
- •Коллекции
- •Массивы - шаблон CArray
- •Списки - шаблон CList
- •Словари - шаблон CMap
- •Класс CTime - дата и время
- •Файловая система - класс CFile
- •Открытие и создание файлов
- •Идентификатор открытого файла
- •Закрытие файлов
- •Чтение и запись файлов
- •Метод Flush
- •Операции с файлами
- •Блокировка
- •Позиционирование
- •Характеристики открытого файла
- •Файловая система - классы CMemFile и CStdioFile
- •Модификация класса CMemFile
- •Файловая система - класс CStdioFile
- •Запись и восстановление объектов
- •Запись в архивный файл
- •Чтение из архивного файла
- •Исключения - класс CException
- •Класс CException
- •Класс CMemoryException
- •Класс CFileException
- •Приложение Except
- •Класс CArchiveException
- •Класс CNotSupportedException
- •Класс CResourceException
- •Класс CUserException
Областьотсечения |
SelectClipRgn IntersectClipRgn |
GetClipBox |
|
OffsetClipRgn ExcludeClipRgn |
|
|
SelectClipPath |
|
|
|
|
Сохранение контекста устройства.
Использование: для того, чтобы изменения атрибутов контекста устройства, сохранялись, при освобождении контекста устройства, и использовались в следующий раз при вызове GetDC или BeginPaint.
Реализация:
•включить флаг CS_OWNDC при регистрации класса окна, проинициализировав атрибуты контекста устройства при обработке сообщения WM_CREATE
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC
•использовать стиль CS_CLASSDC, что приводит к тому, что все окна такого базового класса разделяют один контекст устройства
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_CLASSDC
Принеобходимостиизменитьнекоторыеатрибутыконтекстаустройства, нарисоватьчто-нибудь, используяизмененныеатрибуты, затемвернутьсякоригинальному(предыдущему) состоянию контекстаустройствавызывается:
iSavedID = SaveDC (hdc);
Возвраткконтекстуустройства, существовавшему перед вызовом SaveDC:
RestoreDC (hdc, iSavedID);
Прямые (отрезки) и кривые
Прямые — основа любой векторной графической системы. GDI поддерживает прямые линии, прямоугольники, эллипсы (включая окружности), дуги, являющиеся частью кривой эллипса, и сплайны Безье.
Создание прямых:
•MoveTo()
MoveTo(10, 10); - перемещает текущую позицию в точку с координатами A(10,10).
•LineTo()
LineTo(10, 10); - рисует линию от текущей позиции до точки с координатами
A(10,10).
Для соединения массива точек используется:
•функция LineTo
POINT pt [5] = { 100, 100, 200, 100, 200, 200,
100, 200, 100, 100}; // массивиз5 точек(10 значений)
MoveToEx (hdc, pt[0].x, pt[0].y, NULL);
for (i = 1; i < 5; i++)
LineTo (hdc, pt[i].x, pt[i].y);
•функцияPolyline
Polyline (hdc, pt, 5);//рисованиетогожемассиваиз5 точек
Создание прямоугольников:
Rectangle()
Rectangle (hdc, xLeft, yTop, xRight, yBottom);
Создание прямоугольника с закругленными углами:
RoundRect()
RoundRect (hdc, xLeft, yTop, xRight, yBottom, xCornerEllipse, yCornerEllipse);
Создание эллипсов:
Ellipse()
Ellipse (hdc, xLeft, yTop, xRight, yBottom);
Создание дуг:
•Arc()
Arc (hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd);
•Методы Chord() (сегмент) и Pie() (сектор) принимают такие же аргументы, имеющие тот же смысл, что и в случае метода Arc(). Сегмент получается из дуги соединением конечных точек, а сектор - соединением конечных точек с центром эллипса.
Chord (hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd);
Pie (hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd);
Создание сплайнов:
сплайны — это математические выражения, одна из самых удобных прямых.
•PolyBezier (hdc, pt, iCount);
•PolyBezierTo (hdc, pt, iCount);
Удаление объектов: с помощью функции DeleteObject.
Закрашенные области
Если набор прямых и кривых линий ограничивает со всех сторон некоторую область, то она может быть закрашена с использованием объекта GDI "кисть", выбранного в контексте устройства.
Кисть может быть сплошной, штриховой (состоящей из горизонтальных, вертикальных или диагональных штрихов) или шаблонной, заполняющей область горизонтально и вертикально.
Для выбора одной из встроенных кистей можно воспользоваться функцией GetStockObject, однако в Windows есть только монохромные встроенные кисти.
Использование: для заполнения содержимого рисуемых фигур. Использование кисти определяет цвет и образец заполнения. По умолчанию в контексте рабочей области окна установлена кисть черного цвета и сплошной заливки.
Создание: при создании и использовании кистей используются несколько дополнительных функций:
•Для создания цветной сплошной кисти используется функция CreateSolidBrush.
•Приложение может создать одну из шести кистей штриховки функцией
CreateHatchBrush.
•Можно использовать свой собственный стиль штриховки, создав кисть из битового изображения функцией CreatePatternBrush.
При использовании кистей цвет фона и режим фона управляются функциями SetBkColor и SetBkMode соответственно. Соответствующий эффект на заполнение содержимого объектов оказывает также режим смешивания переднего плана, указанный в вызове функции SetROP2.
Специфической проблемой при использовании образцов и штриховки является проблема начала отсчета кисти. Начало отсчета кисти (brush origin) - это атрибут контекста устройства. Он используется для определения координат точки внутри кисти, которая будет служить начальной при закраске внутренней области фигуры или окна. По умолчанию используются координаты (0,0), соответствующие верхнему левому углу кисти (в системе координат, выбранной в контексте устройства по умолчанию).
•Если кисть используется для закраски внутренней области окна, верхний левый угол изображения кисти совмещается с верхним левым углом этой области. Затем изображение этой кисти многократно повторяется
•При закраске фигур начальное расположение кисти привязывается не к фигуре, а по-прежнему к верхнему левому углу внутренней области окна. Поэтому при закраске, например, прямоугольника, верхний левый угол кисти может не совпадать с верхним левым углом прямоугольника.
•Приложение может изменить начало отсчета кисти (сдвинуть кисть) при помощи функций SetBrushOrg иUnrealizeObject. Сначала при помощи функции UnrealizeOrg
нужно сбросить координаты кисти, а потом функцией SetBrushOrg установить новые значения координат.
Удаление: при помощи функции DeleteObject.
Битовые шаблоны (растровые шаблоны, растровые образы)
Битовые шаблоны — это двумерный массив битов, соответствующий пикселям устройства отображения. Это базовый инструмент в растровой графике.
Использование: для отображения сложных (часто из реального мира) изображений на дисплее или принтере - если нужно вывести на экран сложное изображение, содержащее множество мелких деталей, едва ли его имеет смысл рисовать при помощи перьев и
кистей.Битовые образы также используются для отображения маленьких картинок, таких как значки, курсоры мыши, кнопки панели инструментов программ, которые нужно быстро нарисовать.
Создание: для того чтобы использовать ресурс битового изображения, его нужно предварительно загрузить в память при помощи функции LoadBitmap. После загрузки изображения эта функция выдает дескриптор битового изображения типа HBITMAP.
HBITMAP hBitmap=LoadBitmap(hInst,MAKEINTRESOURCE;
Можно заранее подготовить растровое изображение в одном из графических редакторов и сохранить его в bmp-файле. Затем можно воспользоваться этим изображением в приложении, включив его в состав ресурсов приложения.
•В битовом изображении bitmap каждый пиксел представлен своим цветом. Рисование битовых изображений выполняется путем копирования соответствующего массива графических данных в видеопамять. Для выполнения таких операций приложение обращается к GDI, вызывая соответствующую функцию.
Типы битовых шаблонов:
•aппаратно-независимые, которые могут быть сохранены в файлах на диске;
•аппаратно-зависимые, являющиеся объектами GDI;
Удаление: при помощи функции DeleteObject.
После загрузки растрового изображения его можно использовать.
Основные моменты работы с растровыми изображениями:
•загрузить растровое изображение;
•создать совместимый контекст устройства;
•передать растровое изображение в совместимый контекст устройства;
•передать с помощью BitBlt совместимый контекст устройства в контекст устройства окна;
•выбрать старое растровое изображение в совместимый контекст устройства;
•удалить совместимый контекст устройства;
•удалить растровое изображение.
Текст и шрифты
Текст отличается от других математических объектов компьютерной графики. Типов текста бесконечно много. Поэтому поддержка текста часто наиболее сложная часть в системах компьютерной графики, и, вместе с тем, наиболее важная.
Функции для вывода текста:
•Наиболее часто используемой функцией вывода текста является функция:
TextOut (hdc, xStart, yStart, pString, iCount);
•Для отображения на экране одного столбца TabbedTextOut :
TabbedTextOut (hdc, xStart, yStart, pString, iCount, iNumTabs, piTabStops, xTabOrigin);
•Расширенная функция вывода текста является функция ExtTextOut (приставка Ext означает расширенная):
ExtTextOut (hdc, xStart, yStart, iOptions, &rect, pString, iCount, pxDistance);
•Выводтекставпрямоугольник
DrawText (hdc, pString, iCount, &rect, iFormat);
Шрифты.
Использование: шрифт определяет особенности изображения символов и размер.
Создание: перед тем, как приложение сможет вывести какой-либо текст, оно должно выбрать логический шрифт для выводимого текста. Приложения Windows могут:
•использовать либо один из встроенных шрифтов, получив его функцией
GetStockObject;
•либо создать свой при помощи функции CreateFont, передавая ей требуемые характеристики шрифта.
При запросе приложением шрифта через функцию CreateFont, Windows выбирает из множества доступных шрифтов один, наиболее соответствующий запрашиваемым характеристикам. Тем не менее, в функции CreateFont можно указать имя и размер шрифта. При этом Windows попытается выбрать желаемый шрифт, если он доступен в системе.
Типы шрифтов:
•шрифты устройств;
•шрифты GDI:
растровые шрифты - шрифт битовых шаблонов, "немасштабируемые" шрифтами. Они не могут быть растянуты или сжаты до произвольного размера. Основными преимуществами растровых шрифтов являются их быстрое отображение на экране и четкость;
векторные шрифты - это шрифты, определенные как набор соединенных друг с другом отрезков прямых. Векторные шрифты легко масштабируются в широких пределах, и эти шрифты могут быть увеличены или уменьшены до любого размера. Однако, эти шрифты имеют более низкую скорость отображения, плохую четкость при маленьких размерах, а при использовании больших размеров символы выглядят очень бледными, потому что их контуры — тонкие линии.
типа True Type - это технология контурных шрифтов, которая была разработана
Apple Computer Inc. и Microsoft Corporation; она поддерживается многими производителями шрифтов. Отдельные символы шрифтов TrueType определяются контурами, состоящими из прямых линий и кривых. Таким образом, Windows может масштабировать эти шрифты, изменяя определяющие контур координаты.