- •Методические рекомендации
- •План лекции
- •Интерфейс графического устройства
- •Программирование, основанное на ресурсах
- •Управления памятью
- •Документы и их представление
- •Контрольные вопросы
- •Редактирование функций.
- •Изучение работы приложения.
- •Самостоятельная работа.
- •Добавление своего класса.
- •Домашняя работа.
- •Лекция 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. Использование событий.
Домашнее задание.
Добавьте в немодальное окно различные элементы управления и напишите код для вывода данных в основное окно программы.
Лекция 5. Обработка сообщений Windows и программирование многопоточных приложений Методические рекомендации
Так как материал данной лекции достаточно сложен для первичного восприятия, то необходимо пользоваться наглядными примерами. Очень хорошо для этого подходит Microsoft Word. Сама программа представляет собой приложение. Если ее запустить, то мы получим процесс. Если мы запустим программу еще раз, то получим новый процесс, хотя приложение будет тем же. Внутри каждого из этих процессов выполняется несколько потоков имеющих доступ к глобальным данным внутри одного процесса таким как документ, абзац, шрифт. Примерами потоков могут служить такие сервисы предоставляемые программой как автоматическая проверка правописания, автосохранение, выравнивание абзаца.
План
Понятие процесса и потока
Обработка сообщений в однопоточной программе
Программирование многопоточных приложений
Критические секции
Вытесняющая многозадачность и многопоточность Win32 произвели настоящую революцию в программировании для Windows. Вообще-то, можно разрабатывать полезные однопоточные приложения для Windows. Но, изучив основы многопоточности, Вы сможете создавать более эффективные и мощные программы.
Понятие процесса и потока
Процессом называется выполняемое приложение, обладающее собственной памятью, описателями файлов и другими системными ресурсами. Потоком называется код, исполняемый внутри процесса. Процесс может иметь как один поток, так и множество параллельно выполняющихся потоков. Все пространство кода и данных процесса доступно всем его потокам. Несколько потоков могут обращаться к одним и тем же глобальным переменным или функциям. Потоками управляет операционная система, и у каждого потока есть свой собственный стек. |
Обработка сообщений в однопоточной программе
До сих пор все наши программы были однопоточными (single-threaded), т. е. у кода был лишь один поток исполнения. Казалось бы, при появлении сообщения каким-то чудом вызывается ваш обработчик, но в Windows все происходит совсем не так. Глубоко в недрах MFC-кода, компонуемого с вашей программой, спрятаны такие инструкции:
MSG message; while ( GetMessage (&message, NULL, 0, 0)) { ::TranslateMessage(&inessage); ::DispatchMessage(&iressage); } |
Windows определяет, какие сообщения принадлежат программе, а функция GetMessage возвращает управление, как только появляется сообщение для обработки. Если сообщений нет, программа приостанавливается, и выполняются другие приложения. Когда сообщение в конце концов поступает, программа “пробуждается” Функция TranslateMessage транслирует сообщения WM_KEYDOWN в сообщения WM_CHAR, содержащие ASCII-символы, а функция DispatcbMessage передает управление (через оконный класс) коду выборки сообщений MFC, который вызывает Вашу функцию на основе таблицы обработчиков сообщений. Когда обработчик завершается, он возвращает управление MFC-коду, что в итоге вызывает возврат из DispatcbMessage. |