- •Методические рекомендации
- •План лекции
- •Интерфейс графического устройства
- •Программирование, основанное на ресурсах
- •Управления памятью
- •Документы и их представление
- •Контрольные вопросы
- •Редактирование функций.
- •Изучение работы приложения.
- •Самостоятельная работа.
- •Добавление своего класса.
- •Домашняя работа.
- •Лекция 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. Использование событий.
Состояния кнопок Любая кнопка может находиться в следующих состояниях
Состояние |
Описание |
0 |
Нормальное, не “нажата” |
TBSTATE_CHECKED |
Помечена (“нажата”) |
TBSTATE_ENABLED |
Доступна для использования: если это состояние не установлено, кнопка недоступна, и изображение на ней блеклое |
TBSTATE_HIDDEN |
Невидима |
TBSTATE_INDETERMINATE |
Изображается блеклой |
TBSTATE_PRESSED |
Выбрана (“нажата”) мышью |
TBSTATE_WRAP |
Кнопка является последней в строке |
Кнопка может быть либо командной (“нажата”/“отжата”), либо флажком (“установлен”/“сброшен”). На стандартной панели инструментов, формируемой каркасом приложений, все кнопки — командные.
Панель инструментов и командные сообщения
Когда пользователь щелкает кнопку на панели инструментов, генерируется командное сообщение. Оно доставляется подобно командным сообщениям от меню.
Чаще всего кнопка на панели инструментов дублирует команду меню. Например, кнопка с изображением дискеты на стандартной панели инструментов (формируемой каркасом приложений) эквивалентна команде Save из меню File. Обе генерируют команду ID__FILE_SAVE. A объекту, получившему командное сообщение, безразлично, сгенерировано оно щелчком кнопки на панели инструментов или выбором команды из меню.
Однако у кнопки на панели инструментов может и не быть эквивалента в меню. В этом случае рекомендуется определить для кнопки быструю клавишу, чтобы пользователь мог активизировать эту команду с клавиатуры или через Windows-макрос. Независимо от того, соответствуют кнопки панели инструментов командам меню или нет, используя ClassWizard, можно определить обработчики командных сообщений и сообщений обновления командного интерфейса.
С панелью инструментов связан ресурс растрового изображения и сопутствующий ресурс TOOLBAR в RC-файле, который определяет команды меню, связанные с кнопками. И растровое изображение, и ресурс TOOLBAR имеют одинаковый идентификатор — обычно это IDR_MAINFRAME. Вот содержимое ресурса TOOLBAR, сгенерирированное AppWizard: IDR_MAINFRAME TOOLBAR DISCARDABLE 16, 15 BEGIN BUTTON ID_FILE_NEW BUTTON ID_FILE_OPEN BUTTON ID_FILE_SAVE SEPARATOR BUTTON ID_EDIT_CUT BUTTON ID_EDIT_COPY BUTTON ID_EDIT_PASTE SEPARATOR BUTTON ID_FILE_PRINT BUTTON ID_APP_ABOUT END |
Константы SEPARATOR позволяют отделять группы кнопок друг от друга. Если число кнопок в растровом изображении панели инструментов превосходит количество элементов в ресурсе (исключая разделители), лишние кнопки не показываются.
Редактируя панель инструментов в редакторе ресурсов, Вы изменяете и ресурс растрового изображения, и ресурс TOOLBAR. Чтобы отредактировать свойства кнопки, включая идентификатор, выберите ее изображение, а затем дважды щелкните левую панель.
Обновление пользовательского интерфейса для панелей инструментов
Обработчики сообщений обновления пользовательского интерфейса применяются, чтобы отключать команды меню или помечать их галочками. Эти же обработчики пригодны и для кнопок на панели инструментов. Если подобный обработчик вызывает функцию-член CCmdUI::Enable с параметром FALSE, соответствующая кнопка отключается (становится блеклой) и больше не реагирует на щелчки мышью.
Функция CCmdUI::SetCheck ставит рядом с командой меню галочку, а на панели инструментов реализует кнопку со свойствами флажка. После вызова SetCheck с параметром 1 кнопка “залипает” в нажатом состоянии, а с параметром 0 — возвращается в исходное, “отжатое” состояние. |
Обработчики сообщений обновления пользовательского интерфейса для команд меню вызываются только при отрисовке элементов соответствующего меню. Но панель инструментов постоянно присутствует на экране. Возникает вопрос когда же вызывать обработчики обновления интерфейса? Чтобы состояние кнопок можно было постоянно обновлять, обработчики вызываются в моменты простоя приложения. Если для элемента меню и кнопки на панели инструментов используется один и тот же обработчик, он вызывается и в момент простоя, и при открытии меню.