- •Минобрнауки россии
- •Е.В. Грачева Системное программное обеспечение персональных эвм
- •1 Программирование в операционной среде
- •1.1 Программирование в среде однозадачной операционной системы
- •1.2 Программирование в среде ос Windows
- •1.2.1 Основные понятия
- •1.2.2 Программный интерфейс
- •1.2.2.1 Сообщения, очередь сообщений
- •1.2.2.2 Процедура окна
- •1.2.3 Использование динамических библиотек
- •1.2.3.1.Описание api-функции LoadLibrary
- •1.2.3.2 Описание функции GetProcAddress
- •1.2.3.3 Описание функции FreeLibrary
- •1.2.4 Описание некоторых api-функций
- •1.2.4.1.Функции для создания пользовательского интерфейса
- •1.2.4.1.1 Ввод данных с клавиатуры
- •1.2.4.1.2 Ввод данных с помощью "мыши"
- •1.2.4.1.3 Диалоговые окна
- •1.2.4.2 Функции для получения информации о системе
- •1.2.4.2.1 Информация об аппаратной конфигурации
- •1.2.4.2.3 Конфигурация ос
- •1.2.4.2.4 Системные параметры
- •1.2.4.2.5 Внешний вид системных элементов
- •1.2.4.3 Функции управления памятью
- •1.2.4.3.1 Основные функции управления памятью
- •1.2.4.4.Функции управления файлами
- •1.2.4.4 Функции управления некоторыми устройствами
- •Контрольные вопросы
- •35. Охарактеризовать функцию для определения конфигурации ос
- •36. Охарактеризовать функции об установке системных параметров.
- •2.Ассемблеры
- •2.1 Архитектура процессоров ia-32
- •2.1.1.Основная исполнительная среда микропроцессора с архитектурой ia32
- •2.1.2 Режимы работы и используемая модель памяти процессоров с архитектурой ia32
- •2.1.3 Архитектура ia-32 системного уровня
- •2.2.Программирование на языке ассемблера
- •2.2.1 Метки
- •2.2.2 Директивы
- •2.2.3 Формат команды
- •2.2.4 Система команд микропроцессоров с архитектурой ia32
- •2.2.4.1 Команды пересылки данных
- •Ins строка, dx
- •2.2.4.2 Арифметические операции
- •2.2.4.3 Операции сдвига
- •2.2.4.4 Битовые операции
- •2.2.4.5 Команды для организации циклов
- •1.3.1.1 Команды сравнения
- •2.2.4.6 Команды передачи управления
- •2.2.4.7 Системные команды
- •2.2.4.8 Команды математического сопроцессора
- •2.2.5 Технология программирования
- •2.3 Макроязыки
- •3.Трансляторы
- •3.1 Структура компиляторов и интерпретаторов, лексический, синтаксический и семантический анализаторы, генератор кода
- •3.1.1.Распределение памяти, виды переменных
- •3.1.2.Статическое и динамическое связывание
- •3.2 Загрузчики
- •3.2.1 Функции загрузчика
- •3.2.1 Настраивающий и динамический загрузчики
- •3.3 Подключение библиотек
- •4. Формальные языки и грамматики
- •4.1 Типы грамматик
- •4.1.1 Вывод цепочек
- •4.1.2 Конечный и магазинный автоматы, распознаватели и преобразователи, построение автомата по заданной грамматике
- •Приложения Приложение а
- •Оглавление
- •4. Формальные языки и грамматики
1.2 Программирование в среде ос Windows
1.2.1 Основные понятия
Главным элементом программы в среде Windows является окно. Для каждого окна определяется своя процедура обработки сообщений. Подобные процедуры, вызываемые самой системой, называются процедурами обратного вызова (CALLBACK).
Окно может содержать элементы управления: кнопки, списки, окна редактирования и др. Эти элементы, по сути, также являются окнами, но обладающими особыми свойствами. События, происходящие с этими элементами (и самим окном), приводят к приходу сообщений в процедуру окна. У каждого окна имеется свой идентификатор (дескриптор, handle) окна.
ОС Windows является событийно-управляемой операционной системой [1].Т.е. выполнение той или иной процедуры в приложении инициируется при наступлении определенного события (щелчка мыши, нажатия клавиши и т.п.). Для оповещения приложений о наступлении того или иного события используется механизм сообщений. Таким образом, приложение должно постоянно обрабатывать посланные ему сообщения: какие-то из этих сообщений будут обрабатываться с помощью определенных процедур, какие-то игнорироваться.
Для того чтобы приложение могло определить, какому окну было послано сообщение, в каждом сообщении передается идентификатор окна, которому адресуется данное сообщение.
В общем случае, при посылке сообщения приложению, ОС передает следующую информацию [2].
typedef struct tagMSG { // msg
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
где
hwnd - идентификатор окна, оконная процедура которого получает сообщение
message - определяет номер (код) сообщения .
wParam - определяет дополнительную информацию о сообщении. Точное значение этого поля зависит от кода сообщения (значения поля message).
lParam - определяет дополнительную информацию о сообщении. Точное значение этого поля зависит от кода сообщения (значения поля message).
time - определяет время, когда было размещено сообщение в очереди сообщений окна.
pt - определяет позицию курсора, в координатах экрана, в момент, когда было размещено сообщение.
Однако, микропроцессор не обрабатывает типы данных под названием "HWND", "UINT", "WPARAM" и т.д. - это так называемые логические типы данных. Микропроцессор оперирует двоичными числами, и с этой точки зрения, большинство параметров являются 32-х разрядными двоичными числами1.
Необходимо отметить, что при обработке строк символов (заголовков окна, текстов сообщений) в качестве параметра передается указатель на строку. С учетом того, что в ОС Windows в основном используется плоская модель памяти (см. раздел 2) , указатель является 32-х разрядным числом5. При этом, согласно все ключевые функции создания окон, вывода текста, манипулирования строками и т.п. обрабатывают строки в кодировке Unicode (в Unicode для кодирования символов может использоваться от 1 до 4 байт - UTF-8, однако в Windows используется кодировка UTF-16, предполагающая кодирование любого символа 16 битами). Если какой-либо функции Windows передать при вызове строку в кодировке ANSI (для кодирования символа используется 1 байт), то эта строка сначала будет преобразована в строку в кодировке Unicode, и лишь затем обработана. Поэтому, для повышения производительности приложений предпочтительней использовать строки в кодировке Unicode.
Классическая структура программы под Windows состоит из следующих разделов кода [2]:
Регистрация класса окон
Создание главного окна
Цикл обработки очереди сообщений
Процедура главного окна
В программе могут присутствовать и другие разделы, но вышеперечисленные разделы образуют основной скелет программы. Пример программы приведен в приложении А.
