
- •Вопрос 1.
- •Архитектура ос Windows
- •Основные подсистемы ос Windows
- •Вопрос 2: Интерфейсная библиотека Ntdll.Dll
- •Подсистемы окружения
- •Подсистема Windows
- •Подсистема posix
- •Подсистема os/2
- •Исполнительная подсистема
- •Уровень абстрагирования от оборудования
- •Драйверы устройств
- •Системные процессы
- •Вопрос 3:
- •Реестр 64-битной версии Windows xp
- •Где расположен реестр?
- •Архитектура реестра Windows xp
- •Типы данных реестра Windows xp
- •Вопрос 5: Нотация программного интерфейса ос Windows. Нотация программного интерфейса ос Windows.
- •Вопрос 6: инимальная программа для ос Windows с окном на экране. Создание и отображение окна. Минимальная программа для ос Windows с окном на экране.
- •Регистрация класса окна
- •Создание и отображение окна.
- •Об окнах
- •Вопрос 7: Понятие оконного сообщения. Источники сообщений. Очередь сообщений. Цикл приема и обработки сообщений. Процедура обработки сообщений. Понятие оконного сообщения.
- •Источники сообщений.
- •Очередь сообщений.
- •Цикл приема и обработки сообщений.
- •Процедура обработки сообщений.
- •Посылка синхронных сообщений окну
- •Ввод данных с манипулятора «мышь». Обработка сообщений мыши. Обработка сообщений мыши
- •Ввод данных с клавиатуры. Обработка сообщений от клавиатуры.
- •Понятие фокуса ввода.
- •Вопрос 9: Вывод информации в окно. Механизм перерисовки окна. Вывод информации в окно.
- •Область обновления - update region
- •Механизм перерисовки окна.
- •Вопрос 10:
- •Понятие ресурсов программ. Виды ресурсов. Работа с ресурсами. Меню. Окна диалога.
- •Понятие ресурсов программ. Виды ресурсов.
- •Работа с ресурсами. Меню. Окна диалога.
- •Понятие контекста устройства
- •Вывод графической информации на физическое устройство.
- •Вопрос 12: Рисование геометрических фигур. Графические инструменты. Управление цветом. Палитры цветов.
- •Вопрос 13: Растровые изображения. Вывод растровых изображений. Значки и курсоры. Вывод растровых изображений с эффектом прозрачного фона. Растровые изображения. Значки и курсоры.
- •Вывод растровых изображений.
- •Вопрос 14: Вывод текста. Логические и физические шрифты. Вывод текста.
- •Логические и физические шрифты.
- •Параметры шрифтов.
- •Вопрос 15:
- •Системы координат. Трансформации. Режимы масштабирования.
- •Системы координат. Трансформации.
- •Режимы масштабирования.
- •Вопрос 16: Организация многозадачности в ос Windows. Понятие процесса и потока. Контекст потока. Создание и завершение процессов и потоков. Организация многозадачности в ос Windows.
- •Понятие процесса и потока. Создание и завершение процессов и потоков.
- •Контекст потока.
- •Вопрос 17: Синхронизация потоков одного и того же процесса. Критические секции. Спин-блокировки. Interlocked-функции. Синхронизация потоков одного и того же процесса.
- •Спин-блокироки.
- •Критические секции.
- •Interlocked-функции.
- •Вопрос 18: Синхронизация потоков разных процессов. Объекты синхронизации: флаги, семафоры, события, ожидаемые таймеры.
- •Семафоры
- •События
- •События со сбросом вручную
- •События с авто сбросом
- •Ожидаемые таймеры
- •Вопрос 19: Объекты синхронизации: именованные и неименованные «трубы» (каналы). Именованные трубы.
- •Неименованные трубы.
- •Вопрос 20:
- •Вопрос 23: Отображение файлов в память.
Очередь сообщений.
Windows создает входное сообщение для каждого входного события, генерируемого пользователем с помощью мыши или клавиатуры. Windows сохраняет входные данные в очередь системных сообщений. Затем эти сообщения посылаются в очередь сообщений приложения.
Сообщение приложению от Windows формируется путем создания записи сообщения (Record Message) в очереди сообщений. При этом сохраняется принцип FIFO.
Некоторые сообщения от Windows посылаются непосредственно в окно приложения и не ставятся в очередь. Это так называемые внеочередные сообщения (UM, Unqueued Messages). Типичное UM - это сообщение, которое касается только окна приложения. Хотя большинство сообщений порождается Windows, приложение также может создавать собственные сообщения, помещать их в свою очередь сообщений и посылать другим приложениям.
Цикл приема и обработки сообщений.
Для обработки сообщений главная программа приложения использует непрерывный цикл, так называемый главный цикл сообщений.
Этот цикл содержит некоторое количество функций, предназначенных для обработки сообщений. Как правило, выход из этого цикла совершается только тогда, когда поступает сообщение, которое должно завершить программу. Главный цикл сообщений начинается с вызова функции, которая просматривает очередь сообщений (GetMessage( )).
Когда пользователь нажимает какую-либо клавишу, необходимо послать еще одно сообщение. Это сообщение содержит виртуальный код клавиши (Virtual Key Code), который, хотя и констатирует нажатие клавиши, но не сообщает непосредственно значение символа клавиши. Потому для определения символа сначала вызывается функция (TranslateMessage( )). Затем вызывается функция, которая классифицирует принятое сообщение (DispatchMessage( )). Каждый объект имеет свою процедуру, в которой определены действия для любого из возможных сообщений. Когда эта процедура выполнена, управление передается в начало цикла. Таким образом, сообщения в этом цикле выбираются и обрабатываются последовательно.
Если очередь пуста, ожидается новое сообщение. В этом случае говорят, что приложение находится в режиме ожидания. По-английски это состояние называется Idle. Во время ожидания контроль над системой передается в Windows, благодаря чему другие приложения получают возможность обрабатывать сообщения.
Организация цикла обработки сообщений включает: прием сообщений, трансляцию сообщений, диспетчеризацию сообщений.
Исключение сообщений из очереди сообщений делает одна из функций:
если сообщение WM_QUIT, то функция
BOOL GetMessage(MSG *msg, HWND hWnd, WORD msgFilterMin, DWORD msgFilterMax)
вернет FALSE, иначе TRUE.
BOOL PeekMessage(MSG *msg, HWND hWnd, WORD msgFilterMin, DWORD msgFilterMax, WORD RemoveMsg)
msg – возвращаемое сообщение, если hWnd = 0, то извлекаем сообщения для всех окон. Следующие два параметра (msgFilterMin и msgFilterMax) указывают диапазон сообщений для приема, если оба параметра равны 0 – то принимаем все сообщения.
Параметр RemoveMsg это – одна из 3х констант:
PM_NOREMOVE – Сообщения не удаляются из очереди после запуска PeekMessage
PM_REMOVE – все сообщения, кроме WM_PAINT удаляются из очереди после запуска PeekMessage
PM_NOYIELD – This flag prevents the system from releasing any thread that is waiting for the caller to go idle