- •Методические рекомендации
- •План лекции
- •Интерфейс графического устройства
- •Программирование, основанное на ресурсах
- •Управления памятью
- •Документы и их представление
- •Контрольные вопросы
- •Редактирование функций.
- •Изучение работы приложения.
- •Самостоятельная работа.
- •Добавление своего класса.
- •Домашняя работа.
- •Лекция 2. Основы программирования. Работа с классом Вид. Методические рекомендации:
- •Интерфейс графического устройства
- •Работа с gdi объектами
- •Пример создания нового gdi объекта
- •Режимы преобразования координат
- •Режимы преобразования координат с постоянным масштабом
- •Режимы преобразования координат с переменным масштабом
- •Замечание
- •Координатные пространства mfc
- •Пример использования режимов преобразования координат
- •Работа с окнами, содержащими полосы прокрутки
- •Линейки прокрутки
- •Различные способы прокрутки
- •Прием ввода с клавиатуры
- •Контрольные вопросы
- •Обработка сообщений от мыши.
- •Задание для самостоятельной домашней разработки.
- •Лекция 3. Меню. Панели инструментов и строки состояния Методические рекомендации
- •Меню Windows
- •Обновление командного пользовательского интерфейса
- •Класс cMenu
- •Создание контекстных меню
- •Панели элементов управления и каркас приложений
- •Панель инструментов
- •Растровое изображение панели инструментов
- •Состояния кнопок Любая кнопка может находиться в следующих состояниях
- •Всплывающие подсказки
- •Строка состояния
- •Определение секций в строке состояния
- •Строка сообщений
- •Индикатор состояния
- •Управление строкой состояния
- •Контрольные вопросы:
- •Добавление переменных-членов.
- •Добавление функции OnMouseMove.
- •Программирование команд контекстного меню.
- •Программирование команд главного меню.
- •Домашняя работа.
- •Лекция 4. Диалоговые окна и стандартные элементы управления Методические рекомендации
- •Работа с модальным диалоговым окном
- •Стандартные элементы управления
- •Работа с немодальными диалоговыми окнами
- •Пользовательские сообщения
- •Принадлежность диалогового окна
- •Контрольные вопросы
- •Создание класса “диалогового окна”.
- •Добавление переменных-членов класса вашего диалогового окна.
- •Написание инициализирующего кода
- •Присваивание переменным начальных значений.
- •Самостоятельная работа.
- •Домашнее задание.
- •Лекция 5. Обработка сообщений Windows и программирование многопоточных приложений Методические рекомендации
- •Обработка сообщений в однопоточной программе
- •Передача управления
- •Таймеры
- •Обработка в периоды простоя
- •Программирование многопоточных приложений
- •Функция рабочего потока и запуск потока
- •Общение основного потока с рабочим
- •Общение рабочего потока с основным
- •Синхронизация потоков с использованием событий
- •Блокировка потоков
- •Критические секции
- •Потоки пользовательского интерфейса
- •Контрольные вопросы
- •Домашнее задание.
- •Задание для самостоятельной работы
- •Управление процессом Пример 1.
- •2. Замена образа процеса Пример 2. Использование функции exec.
- •Пример 3. Использование неименованного канала.
- •Пример 4. Создание именованного канал с именем "fifo".
- •3. Сигналы.
- •Пример 5. Использование сигналов.
- •Пример 6. Сообщения.
- •Пример 7. Сообщения.
- •Пример 8. Разделение памяти.
- •Пример 9. Использование семафоров.
- •Пример 10. Создание процесса вWindows.
- •Пример 11. Использование неименованного канала.
- •Пример 12. Использование именованного канала.
- •Пример 13. Использование разделяемой памяти File Mapping.
- •Пример 14. Использование Mailslot.
- •Пример 15. Использование событий.
Пример создания нового gdi объекта
void CMyView::OnDraw (CDC* pDC) { // Создание нового пера CPen newPen (PS_DASHDOT,2,(COLORREF) 0); //Сохранение указателя на старое перо, и выбор // в текущем контексте созданного пера. CPen* oldPen=pDC->SelectObject(&newPen); //Перемещение курсора в точку (10;10) pDC->MoveTo(10,10); //Проводим линию до точки (110;10) pDC->LineTo(110,10); //Востанавливаем старое перо pDC->SelectObject(oldPen); } |
Режимы преобразования координат
По умолчанию, при выводе информации на экран, все размеры, и координаты точек, указываются в пикселях, а началу координат соответствует левый верхний угол. Поэтому рисунок или текст на мониторах с различным разрешением будет выглядеть по разному, не говоря уже о принтерах. Но что делать, если необходимо вывести рисунок или текст фиксированного размера. Например, нужно нарисовать квадрат 5Х5 см, не зависимо от того на каком мониторе он будет представлен. Для этого в Windows существует несколько режимов преобразования координат.
Все режимы преобразования координат можно разделить на две части:
Режимы преобразования координат с постоянным масштабом
Режимы преобразования координат с переменным масштабом
Режимы преобразования координат с постоянным масштабом
Режим преобразования |
Логическая единица |
Описание |
MM_TEXT |
1 пиксель |
Установлен по умолчанию. Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у возрастает вниз. |
MM_LOENGLISH |
0.01 дюйма |
Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у убывает вниз. |
MM_HIENGLISH |
0.001 дюйма |
Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у убывает вниз. |
MM_LOMRTRIC |
0.1 мм |
Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у убывает вниз. |
MM_HIMETRIC |
0.01 мм |
Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у убывает вниз. |
MM_TWIPS |
1/1440 дюйма |
Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у убывает вниз. |
Режимы преобразования координат с переменным масштабом
Режим преобразования |
Логическая единица |
Описание |
MM_ISOTROPIC |
Нет, но коэффициент пропорциональности всегда равен 1:1 |
Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у убывает вниз. |
MM_ANISOTROPIC |
Нет |
Начало координат – верхний левый угол. Ось х возрастает вправо. Ось у убывает вниз. |
Замечание
Режим преобразования координат следует устанавливать в виртуальной функции OnPrepareDC, которая переопределяется при помощи ClassWizard. |
Координатные пространства mfc
Для настойки системы координат в MFC используются два понятия:
Физическая область вывода (viewport), координаты и размеры, которой задаются в физических единицах – пикселях. Физические единицы, еще называют координатами устройства.
Логическая область вывода (window), координаты и размеры, которой задаются в логических единицах, определяемых режимом рисования.
Правила работы с логическими и физическими координатами
Считайте, что все параметры функций – членов CDC – это логические координаты
Считайте, что все параметры функций – членов CWnd – это координаты устройства
Проверяя, попадает ли указатель мыши в определенную область, используйте координаты устройства. Задавайте области в координатах устройства. Такие функции, как CRect::PtInRect, лучше всего работают, если используются координаты устройства.
Некоторые функции для работы с координатами устройства
Все ниже представленные функции являются функциями – членами класса “контекст устройства”
Функция |
Описание |
SetMapMode(<режим преобразования>); |
Устанавливает один из вышеперечисленных режимов преобразования |
SetVieportOrg(<координаты нового начала>); |
Устанавливает новую точку начала координат |
SetWindowExt(<размер по горизонтали, размер по вертикали>); |
Устанавливает размер области вывода по горизонтали и вертикали в логических единицах.(Для режима с переменным масштабом). |
SetVieportExt(<размер по горизонтали, размер по вертикали >); |
Устанавливает размер области вывода по горизонтали и вертикали в физических единицах. (Для режима с переменным масштабом). |
LPtoDP(<координаты (CRect)>); |
Преобразовывает логические координаты в физические |
DPtoLP(<координаты (CRect)>) |
Преобразовывает физические координаты в логические. |