- •Методические рекомендации
- •План лекции
- •Интерфейс графического устройства
- •Программирование, основанное на ресурсах
- •Управления памятью
- •Документы и их представление
- •Контрольные вопросы
- •Редактирование функций.
- •Изучение работы приложения.
- •Самостоятельная работа.
- •Добавление своего класса.
- •Домашняя работа.
- •Лекция 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. Использование событий.
Пример использования режимов преобразования координат
void CEeView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) { pDC->SetMapMode(MM_LOMETRIC); pDC->SetViewportOrg(100,100); CView::OnPrepareDC(pDC, pInfo); } |
В данном примере устанавливается режим преобразования координат MM_LOMETRIC, и начало координат переносится в точку (100;100).
Работа с окнами, содержащими полосы прокрутки
Если с помощью мыши уменьшить размеры обычного окна, то содержимое окна останется неподвижным относительно его левого верхнего уровня, а элементы, расположенные снизу и справа, исчезнут. После увеличения размеров окна эти элементы появятся вновь. Отсюда можно логично заключить, что окно больше, чем его область вывода (viewport), которую Вы видите на экране. Однако область вывода не обязана быть жестко привязана к левому верхнему краю окна. Благодаря функциям CWnd ScrollWindow и SetWindowOrg класс CScrollView позволяет перемещать область вывода в любое место окна, включая области, расположенные выше и левее.
Линейки прокрутки
Microsoft Windows позволяет легко отобразить линейки прокрутки по краям окна, однако Windows сама по себе не пытается каким-либо образом подключить эти линейки прокрутки к окну.
Эту задачу выполняет класс CScrollView. Функции-члены CScrollView обрабатывают сообщения WM_HSCROLL и WM_VSCROLL, которые линейки прокрутки посылают объекту “вид”. Эти функции перемещают область вывода внутри окна и выполняют необходимые вспомогательные действия. |
Различные способы прокрутки
Класс CScrollView поддерживает один определенный способ прокрутки, в котором используется одно большое окно и маленькая область вывода. Для каждого элемента определено положение внутри большого окна. Например, если необходимо отобразить на экране 10000 адресных строк, то вместо окна длиной в 10 000 строк, вероятно, лучше иметь небольшое окно, поддерживающее алгоритм прокрутки, который выбирает для отображения столько строк, сколько можно отобразить в данный момент. В данном случае Вам необходимо создать свой класс “вид” с прокруткой, производный от CView
Microsoft Windows NT использует для представления логических координат 32 разрядные числа, так что пространство логических координат практически не ограничено. Но Windows 95 по прежнему использует некоторые 16 разрядные компоненты и потому представляет логические координаты с помощью 16 разрядных чисел, что ограничивает диапазон их значений от 32.768 до 32.767. Линейки прокрутки в обоих ОС посылают сообщения с 16 разрядными значениями. |
Функция OnlnitialUpdate
Виртуальная функция OnlnitialUpdate важна потому, что к ней первой обращается каркас приложения после того, как полностью создано окно представления, но перед вызовом OnDraw, так что именно в OnlnitialUpdate следует задать логический размер и режима преобразования координат для вывода с прокруткой. Эти параметры устанавливаются с помощью функции CScrollView::SetScrollSizes. |
Прием ввода с клавиатуры
Ввод с клавиатуры — двухэтапный процесс. Windows посылает окну сообщения WM_KEYDOWN и WM_KEYUP с кодами виртуальных клавиш (virtual key codes), но прежде, чем эти сообщения доходят до окна, они транслируются. Если введен символ ANSI (в результате чего генерируется сообщение WM_KEYDOWN), то функция трансляции проверяет состояние регистра клавиатуры и посылает сообщение WM_CHAR с соответствующим кодом символа – либо верхнего, либо нижнего регистра. Клавиши перемещения курсора и функциональные клавиши не имеют соответствующих кодов символов, поэтому для них трансляция не требуется. Окно получает только сообщения WM_KEYDOWN и WM_KEYUP.
Чтобы создать в классе “вид” обработчики этих сообщений, можно воспользоваться ClassWizard. Если Вы собираетесь принимать алфавитно-цифровые клавиши, обрабатывайте WM_CHAR, если Вам нужно обрабатывать нажатия и других клавиш – обрабатывайте WM_KEYDOWN. Библиотека MFC аккуратно предоставляет в качестве параметра функции-обработчика код символа или код виртуальной клавиши.