![](/user_photo/1549_7W_y5.jpg)
- •История 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
![](/html/1549/349/html_zF3yk3EBC5.yf3l/htmlconvd-KH3qLD61x1.jpg)
Режимы масштабирования и преобразования
Приложения обычно указывают расположение и размер объекта для вывода в форме логических координат. Перед тем, как объект физически появится на экране или на принтере, производится ряд вычислений для получения реальных физических координат устройства.
Физические координаты имеют непосредственное отношение к физическому устройству вывода. В качестве единицы измерения длины всегда используется пиксел.. .
Логические координаты передаются функциям GDI, выполняющим рисование или вывод текста. Используемые единицы измерения зависят от режима отображения.
Режим отображения - это атрибут контекста устройства, влияющий на используемую функциями GDI систему координат.
Режимы отображения
Приложения Windows могут использовать одну из нескольких логических систем координат, устанавливая соответствующий режим отображения в контексте устройства.
Установки режима отображения - функция SetMapMode. Определение режима отображения - функции GetMapMode.
Поддерживаемые GDI режимы отображения с ограничениями:
•MM_TEXT – начало системы логических координат находится в верхнем левом углу, и значения вертикальных координат увеличиваются вниз.
•MM_LOENGLISH – начало отсчета находится в левом нижнем углу, и значения вертикальных координат увеличиваются вверх.
•MM_HIENGLISH – начало отсчета находится в левом нижнем углу, и значения вертикальных координат увеличиваются вверх.
•MM_LOMETRIC – начало отсчета находится в левом нижнем углу, и значения вертикальных координат увеличиваются вверх.
•MM_HIMETRIC – начало отсчета находится в левом нижнем углу, и значения вертикальных координат увеличиваются вверх.
•MM_TWIPS – начало отсчета находится в левом нижнем углу, и значения вертикальных координат увеличиваются вверх.
•MM_ISOTROPIC – можно выбирать произвольное направление осей координат и произвольный (но одинаковый) масштаб для осей.
GDI поддерживает только один режим отображения без ограничений, для которого все сказанное в этом пункте относится полностью – режим MM_ANISOTROPIC - самый универсальный режим. Он позволяет устанавливать произвольное направление осей координат, произвольный масштаб для осей координат, причем для каждой оси можно устанавливать свой собственный масштаб.
Преобразование логических координат в физические координаты: xViewport = (xWindow — xWinOrg) × (xViewExt/xWinExt) + xViewOrg yViewport = (yWindow — yWinOrg) × (yViewExt/yWinExt) + yViewOrg
![](/html/1549/349/html_zF3yk3EBC5.yf3l/htmlconvd-KH3qLD62x1.jpg)
или с помощью функции:
LPtoDP (hdc, pPoints, iNumber);
Преобразование физических координат в логические координаты:
xWindow = (xViewport — xViewOrg) × (xWinExt/xViewExt) + xWinOrg yWindow = (yViewport — yViewOrg) × (yWinExt/yViewExt) + yWinOrg
где
(xWindow, yWindow) — логическая точка для преобразования; (xViewport, yViewport) — преобразованная точка в координатах устройства. (xWinOrg, yWinOrg) — начало координат окна в логических координатах; (xWinExt, yWinExt) — протяженность окна в логических координатах;
(xViewExt, yViewExt) — протяженность области вывода в координатах устройства.
илиспомощьюфункции:
DPtoLP (hdc, pPoints, iNumber);
Метафайл
Это набор вызовов команд GDI, сохраненный в двоичном виде.
Использование: для разделения изображений между программами посредством буфера обмена(clipboard)., хотя они могут также быть сохранены на диске в виде файлов.
Формат .WMF
Создание: при создании контекста устройств метафайла – вызов функции CreateMetaFile во время обработки сообщения WM_CREATE.
hdcMeta = CreateMetaFile (NULL) ;
…
hmf = CloseMetaFile (hdcMeta) ;
Удаление: процедура удаления реализуется в теле обработчика сообщения
WM_DESTROY с помощью функции DeleteMetaFile.
Сохранение на диске: при создании контекста устройств метафайла в функции CreateMetaFile параметр NULL заменяется именем файла во время обработки сообщения
WM_CREATE.
hdcMeta = CreateMetaFile (szFileName) ;
Удаление описателя с помощью DeleteMetaFile, но файл на диске остаётся.
Получения описателя метафайла, соответствующего дисковому файлуhmf = GetMetaFile (szFileName);
Удалениедисковогофайлаremove (szFileName);
Формат .EMF(расширенный метафайл)
Создание: при создании контекста устройств метафайла – вызов функции
CreateEnhMetaFile во время обработки сообщения WM_CREATE.
hdcEMF = CreateEnhMetaFile (NULL, NULL, NULL, NULL) ;
…
![](/html/1549/349/html_zF3yk3EBC5.yf3l/htmlconvd-KH3qLD63x1.jpg)
hemf = CloseEnhMetaFile (hdcEMF) ;
Удаление: процедура удаления реализуется в теле обработчика сообщения
WM_DESTROY с помощью функции DeleteEnhMetaFile.
Сохранение на диске: при создании контекста устройств метафайла в функции CreateEnhMetaFile параметр NULL заменяется именем файла во время обработки сообщения WM_CREATE.
hdcEMF = CreateEnhMetaFile (NULL, szFileName, NULL, NULL) ;
…
hemf = CloseEnhMetaFile (hdcEMF) ; DeleteEnhMetaFile (hemf) ;
Получения описателя метафайла, соответствующего дисковому файлуhemf = GetMetaFile (szFileName);
Регионы
Это описание области дисплея, состоящей из комбинации прямоугольников, многоугольников и эллипсов.
Использование: для рисования или для отсечения (ограничения рисования в заданной области рабочей зоны).
Создание: при создании региона, Windows возвращает описатель региона, имеющий тип HRGN. Регионы задаются 2 способами(рассмотрим на примере прямоугольника-простейшего региона)
hRgn = CreateRectRgn (xLeft, yTop, xRight, yBottom);
или
hRgn = CreateRectRgnIndirect (&rect);
Функциирисования:
•FillRgn закрашиваетрегионзаданнойкистью;
•FrameRgn используеткистьдлярисованияпрямоугольнойрамки, нонезакрашивает внутреннююобластьрегиона;
•InvertRgn инвертирует все пиксели в регионе, устанавливая все единичные биты в ноль, а нулевые
— в единицу. Таким образом, функция переводит белую область в черную, черную — в белую, зеленую — в фиолетовую.
•PaintRgn закрашивает внутреннюю область региона текущей выбранной в контекст устройства
кистью.
Удаление: после завершения работы с регионом при помощи функции DeleteObject
DeleteObject (hRgn);
Отсечение.
Это ограничение рисования некоторой областью рабочего пространства. Отсечение, как правило, задается регионом или путем.
Использование: технология отсечения имеет фундаментальное значение в многозадачной оконной среде. Благодаря этой технологии приложения не могут случайно вывести информацию на дисплей вне клиентской части своих окон, также не существует проблем при перекрытии части окна приложения или попадании его части за пределы экрана.
![](/html/1549/349/html_zF3yk3EBC5.yf3l/htmlconvd-KH3qLD64x1.jpg)
Типы областей отсечения: овальная область, многоугольная область, прямоугольная область, прямоугольная область со скругленными краями.
Создание: Приложение может выбрать созданную область отсечения в контекст устройства, вызвав функцию SelectObject или SelectClipRgn. Существующие области отсечения можно объединять с новыми областями при помощи функции SelectClipRgnExt.
или
с помощью функции InvalidateRect, которая делает недействительным прямоугольную область дисплея и генерирует сообщение WM_PAINT.
InvalidateRect (hwnd, NULL, TRUE);
GetUpdateRect – получениекоординатнедействительногопрямоугольника.
ValidateRect – делаетдействительнымпрямоугольникврабочейобласти
длярегионов:
InvalidateRgn (hwnd, hRgn, bErase);
ValidateRgn (hwnd, hRgn);
Удаление: процедура удаления реализуется в теле обработчика сообщения WM_DESTROY с помощью функции DeleteObject
Путь
Это набор отрезков и кривых, хранящихся внутри GDI.
Использование: для рисования, закрашивания и при отсечении. Пути могут быть преобразованы в регионы.
Создание: для определения пути вызывается функция BeginPath (hdc)- любая линия запоминается как часть пути и не воспроизводится в контексте устройства.
Функции для создания связанных линий:
LineTo
PolylineTo
BezierTo
EndPath (hdc) - завершениеопределенияпути.
Функции, уничтожающиеопределениепути(послезавершения)
StrokePath (hdc); - рисуетпуть, используятекущееперо;
FillPath (hdc); - закрашиваетпуть, используятекущуюкисть, всоответствиистекущим режимомзакрашиваниямногоугольников;
StrokeAndFillPath (hdc); - тожечто StrokePath иFillPath hRgn = PathToRegion (hdc);
SelectClipPath (hdc, iCombine);
Удаление: процедура удаления реализуется в теле обработчика сообщения WM_DESTROY с помощью функции DeleteObject