
- •Вопрос 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 существует набор стандартных классов с заранее заданными свойствами. Как правило, любая программа для своего главного окна регистрирует оконный класс. Имя класса выбирается программистом произвольно.
Style – битовые флаги задающие начальные свойства всех окон данного класса
wndc.style = CS_HREDRAW | CS_VREDRAW;
LpfnWndProc – указатель на callback-функцию вызываемую для обработки сообщений адресованных окнам данного класса. Callback-функция отличается от обычной тем, что вызывается из вне прикладной программы. В данном случае она вызывается ОС.
wndc.lpfnWndProc = (WNDPROC)WndProc;
cbclsExtra – задает дополнительное количество байт выделяемое за структурой оконного класса.
wndc.cbClsExtra = 0;
cbWndExtra – дополнительное количество байт выделяемое для экземпляра окна
wndc.cbWndExtra = 0;
hInstance – дескриптор экземпляра приложения регистрирующего окно
wndc.hInstance = hInst;
hIcon - Дескриптор пиктограммы
wndc.hIcon = LoadIcon(0, IDI_APP_DEFAULTICON);
hCursor – дескриптор курсора, который рисуется в пределах рабочей области окна
wndc.hCursor = LoadCursor(0, IDC_ARROW);
hbrBackground – дескриптор кисти для заливки фона
wndc.hGrBackground = GetDefObject(GRAY_BRUSH);
lpszMenuName – идентификатор меню из ресурсов прикладных программ
wndc.lpszMenuName = NULL;
lpsz ClassName – строковый идентификатор оконного класса в ОС.
wndc.lpszClassName = “MyMinWinApp”;
Регистрация оконного класса выполняется с помощью функции
BOOL RegisterClass(WNDCLASS* wndClass);
Создание и отображение окна.
Для создания окна существует функция
HWND CreateWindow(
LPCTSTR lpClassName, // registered class name
LPCTSTR lpWindowName, // window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // menu handle or child identifier
HINSTANCE hInstance, // handle to application instance
LPVOID lpParam // window-creation data
);
При создании окна этой функцией, функции обработчику приходит сообщение вместе с которым передается параметр Param. После вызова окно формируется в памяти и не отображается на экране.
Для отображения окна используется функция:
BOOL ShowWindow(HWND hWnd, int nCmdShow);
Для обновления содержимого окна используется функция:
void UpdateWindow(HWND hWnd);
Она заставляет окно перерисовать свою область, посылая сообщения WM_PAINT.
Практически вся логика работы программы под Windows размещается в оконных функциях.
ОКОННАЯ ФУНКЦИЯ
RESULT CALLBACK WndProc(HWND Wnd, UINT message, WPARAM wParam, LPARAM lParam);
Описание функции включает директиву CALLBACK, которая делает эту функцию доступной для вызова извне приложения. Параметры оконной функции соответствует полям структуры MSG. Структура MSG описывает сообщение.
typedef struct tagMSG
{
HWND hwnd; // дескриптор окна, в котором возникло сообщение
UINT message; // код сообщения (WM_<сообщение>. Пользовательские
// сообщения начинаются с WM_USER)
WPARAM wParam; // Доп. Информация (зависит от типа сообщений)
LPARAM lParam; // Доп. Информация (зависит от типа сообщений)
DWORD time; // Система помещает время в миллисекундах, которое истекло
//с момента запуска системы, до постановки сообщения в //очередь
POINT pt; //Указывает позицию курсора мыши в экранных координатах
//на момент возникновения сообщения
} MSG, *PMSG;