- •Методические рекомендации
- •План лекции
- •Интерфейс графического устройства
- •Программирование, основанное на ресурсах
- •Управления памятью
- •Документы и их представление
- •Контрольные вопросы
- •Редактирование функций.
- •Изучение работы приложения.
- •Самостоятельная работа.
- •Добавление своего класса.
- •Домашняя работа.
- •Лекция 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. Использование событий.
Домашняя работа.
Усовершенствовать программу таким образом, чтобы при перерисовке экрана фигуры не пропадали.
Лекция 4. Диалоговые окна и стандартные элементы управления Методические рекомендации
Обратите особое внимание студентов на добавление элементов управления в период выполнения программы. Это очень важно, так как часто в реальной практике на начало программы неизвестно, какие элементы управления должны присутствовать в диалоговом окне.
Так как немодальные окна чаще используются чем модальные, то необходимо добиться полного понимания студентами процесса работы с немодальными диалоговыми окнами.
Для лучшего понимания работы с диалоговыми окнами и разницы между модальными и немодальными диалоговыми окнами рекомендуется пользоваться примерами. Очень хорошо для этих целей подходит программа из пакета Microsoft Office – Microsoft Word. Примером модального диалогового окна может служить окно “открытия файла”, а примером немодального окна – “найти и заменить”.
План
Модальные и немодальные диалоговые окна
Работа с модальным диалоговым окном
Стандартные элементы управления
Работа с немодальными диалоговыми окнами
Модальные и немодальные диалоговые окна
Практически все Windows – программы взаимодействуют с пользователем при помощи диалоговых окон. Диалоговое окно может просто содержать какое-то сообщение и кнопку Ok, а может быть и очень сложной формой для ввода данных.
Существует два типа диалоговых окон: Модальные(modal). Пока открыто модальное диалоговое окно, пользователь не может работать ни с каким другим окном программы. Например, Open File – “Открытие файла”. Немодальные(modeless). Пока открыто немодальное диалоговое окно, работать с другими окнами программы можно. Например, Find and Replace – “Найти и заменить” редактора Microsoft Word. |
Работа с модальным диалоговым окном
Для того, чтобы добавить в ваше приложение модальное диалоговое окно необходимо выполнить следующие действия: Используя редактор диалоговых окон, создать диалоговый ресурс с элементами управления. С помощью ClassWizard создать класс “диалоговое окно”, производный от CDialog, и связать его с ресурсом созданным в п.1. Используя ClassWizard, добавить в класс диалогового окна переменные члены и функции, предназначенные для обмена и проверки данных. С помощью ClassWizrd добавить обработчики сообщений для кнопок и других, генерирующих события, элементов управления диалогового окна. Написать код для инициализации (в функции OnInitDialog) элементов управления и для обработчиков сообщений. Добавить код, активизирующий диалоговое окно. Он сводится к вызову конструктора вашего класса диалогового окна и последующему вызову функции – члена DoModal(). |
Стандартные элементы управления
Элемент управления “индикатор продвижения”
Индикатор продвижения – один из самых простых в программировании стандартный элемент управления; его представляет MFC класс CProgressCtrl. Для инициализации индикатора продвижения необходимо вызвать (обычно это делается в функции OnInitDialog) функции-члены SetRange и SetPos. После этого, при необходимости, нужно вызывать функцию SetPos из обработчиков сообщений. |
Элемент управления “ползунок”
Ползунок (класс CSliderCtrl) позволяет вводить аналоговые значения. Программным путем можно создать шкалу, деления которой соответствуют шагу приращения. Текущее положение ползунка возвращает функция – член GetPos. |
Элемент управления “наборный счетчик”
Наборный счетчик (класс CSpinButtonCtrl) – это вариант полосы прокрутки, который часто используется совместно с полем ввода. Суть работы данного элемента в том, что пользователь, поместив курсор на счетчик и удерживая левую клавишу мыши, может увеличивать или уменьшать значение в поле ввода. Скорость работы тем выше, чем дольше удерживается клавиша мыши. Если приложение оперирует в поле ввода только целыми числами, можно полностью обойтись без программирования на C++. Для того чтобы изменить диапазон и схему ускорения набора значений можно воспользоваться функциями-членами SetRange и SetAccel. Для того чтобы поле ввода отображало нецелые значения, необходимо создать обработчик сообщения WM_VSCROLL (или WM_HSCROLL) от наборного счетчика. В обработчике необходимо осуществлять преобразования целых значений поступающих от счетчика в значения отображаемые в поле ввода. |
Элемент управления “графический список”
Элемент управления “графический список” (класс CListCtrl) необходим для создания списка способного отображать не только текст но и графику. Когда пользователь выбирает какой–нибудь элемент, посылается уведомляющее сообщение, которое нужно обработать в классе “диалогового окна”. Элементы идентифицируются целочисленными индексами, начиная с 0. |
Элемент управления “древовидный список”
Элемент управления “древовидный список” (класс CTreeCtrl) позволяет легко добавить в программу возможности аналогичные графическим возможностям отображения информации Microsoft Windows Explorer (Проводника). Графический и древовидный списки имеют некоторые общие черты: они могут работать с одним и тем же списком изображений и совместно использовать одни и те же уведомляющие сообщения. Однако методы идентификации элементов у них разные. В древовидном списке вместо целочисленных индексов применяют описатель HTREEITEM. Для того чтобы вставить новый элемент необходимо обратиться к функции-члену InsertItem, но перед этим нужно сформировать структуру TV_INSERTSTRUCT, которая идентифицирует строку, индекс в списке изображений и описатель родительского элемента (NULL для элементов верхнего уровня). |
Примечание
И графический и древовидный списки получают выводимые ими картинки от стандартного элемента управления – список изображений (класс CImageList). В программе необходимо сначала сформировать список изображений из значков или растровых изображений, а затем передать элементу управления “графический список” или “древовидный список” указатель на этот список. Формировать список лучше всего в функции OnInitDialog. |
Добавление элементов управления в период выполнения
Если необходимо добавить элемент управления в период выполнения программы нужно выполнить следующие действия: Добавить в класс “диалоговое окно” переменную-член для внедряемого элемента управления. MFC-классы таких элементов управления включают CButton, CEdit, CListBox, CComboBox и т.д. Внедряемые C++ объекты конструируются и уничтожаются вместе с объектом “диалоговое окно”. Выбрать из меню View среды Visual C++ команду Resource Symbols. Добавить константу идентификатор нового элемента управления. Вызвать функцию-член Create внедряемого элемента управления в том месте программы, где должен создаваться новый элемент управления (обычно это обработчик сообщения WM_INITDIALOG – функция OnInitDialog). Добавить вручную в производный класс диалогового окна обработчики уведомляющих сообщений, необходимые новому элементу управления. |
Сообщение WM_NOTIFY
Раньше элементы управления Windows посылали свои уведомления в сообщениях WM_COMMAND. Однако стандартных 32-х разрядных параметров wParam и lParam недостаточно для передачи всей информации от стандартных элементов управления их объектам-родителям. Корпорация Microsoft решила проблему “пропускной способности”, введя новое сообщение WM_NOTIFY. При отправке такого сообщения wParam содержит идентификатор элемента управления, а lParam служит указателем на структуру NMHDR, модифицируемую данным элементом управления. Эта структура определяется на C++ следующим образом: typedef struct tagNMHDR { HWND hwndFrom; // описатель элемента управления, отправляющего сообщение UINT idFrom; // идентификатор этого элемента UINT code; // специфичный для этого элемента код уведомления }NMHDR; |
Однако многие элементы управления посылают сообщения WM_NOTIFY с указателями на структуры более крупные, чем NMHDR. Эти структуры содержат не только показанные выше три поля данных, но и дополнительные поля, специфичные для конкретного элемента управления. Например, во многих уведомлениях от древовидных списков передается указатель на структуру NM_TREEVIEW, содержащую структуру TV_ITEM и другие данные. Поэтому сопоставив обработчику сообщение WM_NOTIFY, ClassWizard генерирует указатель на соответствующую структуру.