
- •1. Назначение, основные этапы развития операционных систем
- •2. Современные ос и их классификация
- •3. Основные принципы построения ос
- •4. Мультипрограммность и мультизадачность
- •1. Процесс, ресурс, свойства, классификация
- •2. Концепция виртуализации
- •3. Принципы построения интерфейсов операционных систем. Интерфейсы прикладного программирования
- •4. Концепция прерывания
- •1. Система управления процессами. Процессы, потоки.
- •2. Средства распределения ресурсов
- •3. Система распределения оперативной памяти. Контроль и распределение памяти в ms-dos
- •4. Алгоритм распределения памяти ms_dos
- •5. Блок управления памятью (mcb)
- •1. Файловая система. Концепция управления файлами
- •2. Текстовые файлы. Двоичный файлы
- •2. Создание файла и создание связи с файлом
- •3. Удаление файла и связи с файлом
- •4. Модификация файлов
- •5. Операции с файлами
- •6. Организация данных на внешних носителях. Внешняя память на дисках
- •7. Файловая система fat. Структура и расположение системной информации файловой системы.
- •8. Структура boot
- •9. Таблица расположения файлов fat
- •10. Структура корневого директория root
- •11. Структура директория
- •12. Алгоритм поиска расположения файлов на диске
- •13. Определение начального кластера расположения файла на диске
- •14. Расчет номеров цепочки кластеров расположения фала на диске
- •15. Методы доступа к информации на дисках
- •16. Изменение элементов таблиц fat и root при выполнении команд dos: copy, move, del, rename.
- •1. Общие сведения о механизме прерываний
- •1. Аппаратные прерывания
- •2. Программные прерывания
- •3. Таблица векторов прерываний
- •4. Перехват прерывания
- •5. Каскадная обработка прерывания
- •1. Загрузка и запуск программ ms dos
- •2. Заголовок *.Exe
- •3. Psp текущей задачи
- •4. Дочерние процессы и их запуск
- •5. Среда процесса, наследование среды
- •6. Системные управляющие блоки dos (таблица векторной связи)
- •7. Завершение процесса
- •1. Архитектура ос Windows. Функционирование и взаимосвязь модулей операционной системы
- •2. Понятие окна. Принципы организации графического пользовательского интерфейса.
- •3. Операции с объектом – окно
- •4. Событийное управление программами
- •5. Сообщение. Цикл обработки сообщений. Очередь сообщений.
- •6. Процедура обработки сообщений, ее формат и правила написания
- •7. Синхронные и асинхронные сообщения, их передача и обработка
- •8. Ввод данных с клавиатуры
- •9. Коды oem, ansi, ascii, виртуальные коды
- •10. Фокус ввода
- •11. Обработка сообщений мыши
- •12. Таймер. Программирование таймера
- •1. Графические устройства и их контекст
- •2. Атрибуты контекста устройств
- •3. Логическая и физическая система координат
- •4. Режимы преобразования координат
- •5. Объекты gdi. Создание и использование
- •6. Gdi и векторная модель рисования
- •7. Быстрая векторная графика
- •8. Шрифт. Классификация, параметры шрифта, установка в контексте устройства.
- •Структура logfont
- •9. Атрибуты контекста устройств, влияющие на вывод текста
- •10. Методы gdi вывода текста
- •11. Управление направлением, размером и расстоянием между символами
- •1. Создание процесса
- •2. Описатель процесса
- •3. Командная строка процесса
- •4. Среда процесса.
- •5. Наследование объектов ядра дочерним процессом.
- •6. Класс процесса.
- •7. Текущий директорий процесса.
- •8. Получение инф-ции о процессе
- •9. Окончание процесса
6. Процедура обработки сообщений, ее формат и правила написания
Оконная функция вызывается операционной системой Windows, когда программе нужно послать сообщение. В качестве параметров оконная функция получает сообщение, посылаемое Windows.
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
У функции окна имеется четыре аргумента:
hWnd - идентификатор окна.
msg - код текущего сообщения.
wParam и lParam - дополнительная информация о сообщении.
В Windows существует более тысячи стандартных сообщений. Для обработки стандартных сообщений существует функция DefWindowProc(), которая обрабатывает переданное ей сообщение по умолчанию. Таким образом, вы должны обрабатывать только те сообщения, обработка по умолчанию которых вас не устраивает.
LRESULT DefWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
7. Синхронные и асинхронные сообщения, их передача и обработка
Синхронными сообщениями называются сообщения, которые Windows помещает в очередь сообщений программы, и которые извлекаются и диспетчеризуются в цикле обработки сообщений.
Асинхронные сообщения передаются непосредственно окну, когда Windows вызывает оконную процедуру. В результате оконная процедура получает все предназначенные для окна сообщения, как синхронные, так и асинхронные.
Структура программ для Windows очень проста, поскольку у них имеется только одно центральное место обработки сообщений. Говорят, что синхронные сообщения помещаются в очередь сообщений, а асинхронные посылаются прямо в оконную процедуру.
Синхронными становятся сообщения, в основном, тогда, когда они являются результатом пользовательского ввода путем нажатия клавиш (например, WM_KEYDOWN и WM_KEYUP), это символы, введенные с клавиатуры (WM_CHAR), результат движения мыши (WM_MOUSEMOVE) и щелчков кнопки мыши (WM_LBOTTONDOWN).
Кроме этого синхронные сообщения включают в себя сообщение от таймера (WM_TIMER), сообщение о необходимости плановой перерисовки (WM_PAINT) и сообщение о выходе из программы (WM_QUIT).
Сообщения становятся асинхронными во всех остальных случаях. Часто асинхронные сообщения являются результатом синхронных. При передаче асинхронного сообщения в DefWindowProc из оконной процедуры, Windows часто обрабатывает сообщение, отправляя оконной процедуре другие асинхронные сообщения.
С позиции оконной процедуры, эти сообщения проходят через нее упорядочено или синхронно.
Часто асинхронные сообщения являются результатом вызова определенных функций Windows или непосредственным результатом вызова функции SendMessage.
8. Ввод данных с клавиатуры
Механизм сообщений клавиатуры
Windows предоставляет возможность аппаратно независимого ввода с клавиатуры. Для этого используется драйвер (keyboard device driver), который преобразует аппаратно-специфичные скан коды (scan codes) клавиатуры (keyboard) в общие для всех приложений виртуальные коды клавиш. Затем Windows посылает сообщения (messages) приложениям, ожидающим ввод с клавиатуры, в итоге их обработка завершается в оконной процедуре (window procedure), наряду с другими сообщениями. Использование виртуальных кодов клавиш позволяет унифицировать обработку событий клавиатуры для приложений, запускаемых на различных компьютерах.
Сообщения, поступающие от клавиатуры, требуют дополнительной обработки – трансляции. Поэтому после приема сообщения нужно вызвать функцию
BOOL TranslateMessage(
CONST MSG *lpMsg
);
Она преобразовывает сообщение о нажатии клавиши в сообщение о приходе символа. Дело в том, что сообщения, генерируемые драйвером клавиатуры, содержат виртуальный key-code, который определяет, какая клавиша была нажата, но не определяет символьное значение этой клавиши. Функция TranslateMessage, не изменяя переданное ей сообщение, помещает еще одно сообщение с соответствующим символьным значением в очередь приложения. Функция возвращает True, если переданное ей сообщение оказалось клавиатурным.
После трансляции сообщение диспетчируется оконной процедуре:
LONG DispatchMessage(
CONST MSG *lpmsg
);
В большинстве случаев клавиатура используется для ввода текстовой информации. При этом изначально клавиатура дает информацию о нажатой клавише, а не о введенном символе. Для получения символа необходимо использовать подпрограммы, переводящие виртуальные кода клавиатура в коды символов.
В Windows окно, имеющее фокус ввода, при нажатии на клавишу получает сообщение WM_KEYDOWN. При отпускании нажатой клавиши приходит сообщение WM_KEYUP. Эти сообщения (наряду с WM_SYSKEYDOWN и WM_SYSKEYUP) называются сообщениями нажатия клавиш (keystroke messages). При появлении любого из этих сообщения wParam содержит виртуальный код клавиши, а lParam – дополнительную информацию о состоянии клавиатуры, такую как количество повторений клавиши (repeat count), скан код (scan code), флаг расширенной клавиши (extended-key flag), признак нажатой клавиши Alt (context code), признак нажатия клавиши до прихода текущего сообщения (Previous Key-State Flag), признак положения клавиши “нажата” (Transition-State Flag).