
- •Министерство образования и науки Российской Федерации
- •Лекция 1. Введение.
- •Лекция 2. Структура подсистемы обмена с ву
- •Лекция 3. Регистры ву
- •3.1. Виды регистров внешних устройств
- •3.2. Виды адресации регистров ву
- •Лекция 4. Алгоритм обмена без прерываний
- •37Bh – не используется
- •Лекция 5. Прерывания
- •5.1. Механизм прерываний
- •5.2. Таблица векторов прерываний
- •Лекция 6. Изменения установок обработки прерываний
- •6.1. Маскирование прерываний
- •6.2. Изменение таблицы векторов прерываний
- •6.3. Обработчики прерываний
- •Лекция 7. Аппаратные прерывания
- •Лекция 8. Дисковые системы (Часть 1) Организация магнитного диска
- •Лекция 9. Дисковые системы (Часть 2) Функции bios для работы с дисками
- •Инициализация контроллера нмд
- •Лекция 10. Файловые системы (Часть 1)
- •Организация логического диска
- •Лекция 11. Файловые системы (Часть 2)
- •Файловые системы Windows
- •Лекция 12. Файловая системаntfs Главная файловая таблица
- •Последовательность обновления
- •Атрибуты
- •Типы атрибутов
- •Лекция 13. Атрибуты ntfs
- •Списки отрезков
- •Лекция 14. Анализ и восстановление файловой системы
- •Лекция 15. Управление памятью
- •Типы адресов
- •Методы распределения памяти без использования дискового пространства
- •Лекция 16. Виртуальная память
- •Лекция 17. Виртуальная память (продолжение)
- •Лекция 18. Иерархия запоминающих устройств
- •Лекция 19. Управление вычислительными процессами
- •Вытесняющие и невытесняющие алгоритмы планирования
- •Лекция 20. Синхронизация и взаимодействие процессов
- •V(b); /* Выход из критической секции */
- •Лекция 21. Архитектура драйвера файловой системы
- •Локальные fsd
- •Удаленные fsd
- •Работа файловой системы
- •Явный файловый ввод-вывод
- •Подсистема отложенной записи
- •Поток, выполняющий опережающее чтение
- •Драйверы фильтров файловой системы
- •Лекция 22. Windows api
- •Windows api— набор функций операционной системы
- •Лекция 23. WindowsApi(продолжение)
- •Окно рабочего стола
- •Приложение Windows
- •Компоненты окна приложения
- •Создание окна
- •Атрибуты окна
- •Класс окна
- •Имя окна
- •Стиль окна
- •Родитель или владелец окна
- •Расположение, размер и позиция в z-порядке
- •Идентификатор дочернего окна или дескриптор меню
- •Дескриптор копии приложения
- •Дополнительные данные
- •Дескрипторы окна
- •Создание главного окна
- •Сообщения, посылаемые при создании окна
- •Многопоточные приложения
- •Общие стили окна
- •Позиционирование
- •Взаимоотношения с родительским окном
- •Рамка окна
- •Компоненты неклиентской области окна
- •Заблокированное окно
- •Окна переднего плана и фоновые окна
- •Активное окно
- •Видимость
- •Свернутые, развернутые и восстановленные окна
- •Размер и позиция окна
- •Размер окна
- •Позиция окна
- •Размер и позиция по умолчанию
- •Системные команды
- •Сообщения, связанные с размером и позицией окна
- •Уничтожение окна
- •Как создать главное окно
- •Работа с дочерними окнами
- •Как уничтожить окно
- •Лекция 24. Ловушки сообщений (Хуки)
- •Лекция 25. Трансляция с языков программирования Сущность трансляции. Компиляция и интерпретация
- •Фазы трансляции и выполнения программы
- •Препроцессор
- •Трансляция и ее фазы
- •Модульное программирование, компоновка
- •Структура транслятора
Создание главного окна
Каждое приложение Win32 должно иметь функцию WinMain(), которая является точкой входа.WinMain()выполняет ряд задач, в том числе регистрацию класса окна для главного окна и создание главного окна.WinMain()регистрирует класс главного окна, вызывая функциюRegisterClass(), и создает главное окно с помощью функцииCreateWindowEx().
Функция WinMain()может также запретить Вашему приложению создавать более одной копии приложения. Для этого создайте именованный мьютекс с помощью функцииCreateMutex(). Если функцияGetLastError()возвращает ERROR_ALREADY_EXISTS, это означает, что одна копия Вашего приложения уже существует (она создала мьютекс) и Вы должны выйти из функцииWinMain().
Windows не отображает автоматически главное окно после его создания; приложение должно использовать функцию ShowWindow(), чтобы отобразить главное окно. После создания главного окна функцияWinMain()вызывает функциюShowWindow(), передавая ей два параметра: дескриптор главного окна и флаг, определяющий, должно ли главное окно быть свернуто или развернуто в момент отображения. Обычно флаг может быть установлен в любую из констант, начинающихся с префикса SW_. Однако, когдаShowWindow()вызывается, чтобы отобразить главное окно приложения, флаг должен быть установлен в SW_SHOWDEFAULT. Этот флаг сообщает Windows, что нужно отобразить окно так, как указано программой, которая запустила приложение.
Если окно создается как окно Unicode, оно получает только сообщения Unicode. Вы можете определить, является ли данное окно окном Unicode, вызвав функцию IsWindowUnicode().
Сообщения, посылаемые при создании окна
При создании любого окна Windows посылает сообщения функции этого окна. Windows посылает сообщение WM_NCCREATE после создания неклиентской области окна и сообщение WM_CREATE после создания клиентской области. Функция окна получает оба сообщения до того, как Windows отобразит окно. Оба сообщения содержат указатель на структуру CREATESTRUCT, которая содержит всю информацию, определенную в функции CreateWindowEx(). Как правило, функция окна выполняет нужную инициализацию после получения этих сообщений.
При создании дочернего окна Windows посылает сообщение WM_PARENTNOTIFY родительскому окну после отправки сообщений WM_NCCREATE и WM_CREATE. Windows также посылает другие сообщения при создании окна. Количество и порядок этих сообщений зависят от класса и стиля окна, а также от функции, используемой для создания окна.
Многопоточные приложения
Приложение Win32 может иметь множество потоков выполнения, и каждый поток может создавать окна. Поток, который создает окно, должен содержать код функции этого окна
Приложение может использовать функцию EnumThreadWindows(), чтобы перечислить все окна, созданные определенным потоком. Эта функция передает дескриптор каждого окна данного потока определенной приложением функции обратного вызоваEnumThreadWndProc().
Функция GetWindowThreadProcessId()возвращает идентификатор потока, который создал определенное окно.
Если окно создано другим потоком, Вы можете изменить параметр, который определяет, будет ли это окно показано в свернутом или развернутом виде, используя функцию ShowWindowAsync().