Главная страница

Принадлежность окон потокам. Тема Принадлежность окон потокам


Скачать 46.73 Kb.
НазваниеТема Принадлежность окон потокам
АнкорПринадлежность окон потокам
Дата28.11.2022
Размер46.73 Kb.
Формат файлаdocx
Имя файлаПринадлежность окон потокам.docx
ТипДокументы
#817885

Тема: Принадлежность окон потокам

При запуске приложения в Windows происходит создание процесса. Но ОС не выделяет для него процессорного времени. Процессу принадлежат открытые файлы, участки оперативной памяти и другие ресурсы. Кроме того, ему принадлежит программный поток. Поток, фактически, – это набор значений внутренних регистров процессора. Поток содержит информацию о том, какая машинная команда выполняется процессором в данный момент и где расположены локальные переменные. ОС выделяет квант времени каждому из работающих на компьютере потоков, т.о. в ОС обеспечивается многозадачность.

У одного процесса может быть несколько потоков. Например, в текстовом редакторе один поток может обрабатывать ввод данных от пользователя, а другой передавать документ на принтер.

Окно всегда "принадлежит" потоку. Поток может владеть одним или несколькими окнами, а также может не иметь ни одного окна. Окна потока сами находятся в иерархической связи: некоторые из них являются окнамиверхнегоуровня, а некоторые – дочернимиокнами других окон (рис. 1.1).




Рис. 1.1. Процессы, потоки и окна.

 

В Windows существует большое количество разных типов окон. Некоторые из них очевидны, например, главное окно приложения (о котором пользователь обычно думает, что это и есть приложение) и диалоговые окна. Менее очевидно, что большинство элементов управления в окнах приложений и диалоговых окнах тоже являются окнами. Каждая кнопка, строка ввода, полоса прокрутки, список, пиктограмма и даже фон рабочего стола рассматриваются ОС как окна.

На рис. 1.2 показан рабочий стол Windows c двумя запущенными приложениями (Блокнот и Калькулятор). Каждое окно, в том числе кнопки, выделено черной рамкой.



Рис. 1.2. Окна различных типов.

 

Оконные классы

Оконныеклассы – это шаблоны, хранящие информацию о свойствах окна. Среди этих свойств – начальные размеры окна, его пиктограмма, курсор и меню. Вероятно, самое главное свойство – это адрес функции, называемой оконнойпроцедурой. Приложение обычно выполняет обработку полученных сообщений с помощью вызова функции DispatchMessage из Win API. Функция DispatchMessage, в свою очередь, вызывает соответствующую оконную процедуру. Адрес оконной процедуры при этом извлекается из оконного класса окна, которому послано сообщение. Именно оконная процедура выполняет обработку всех сообщений, посылаемых окну.

В Windows есть много стандартных оконных классов, например, стандартные элементы управления вроде кнопок (класс Button) и строк ввода (класс Edit).

Для регистрации новых оконных классов предназначена функция RegisterClass. Т.о. программист может реализовать окно с поведением, которого нет ни у одного из стандартных оконных классов. Например, именно так обычно реализуется главное окно приложения и выполняется регистрация пиктограммы и главного меню приложения.

Windows позволяет создавать подклассыи суперклассы для существующих оконных классов. При создании подкласса выполняется замена оконной процедуры класса. Это делается с помощью функции SetWindowLong (подкласс экземпляра) или SetClassLong (глобальный подкласс). Различие между двумя функциями в том, что в первом случае изменяется поведение только одного экземпляра окна, а во втором случае – поведение всех окон данного класса (в пределах приложения).

При создании суперкласса новый класс основывается на существующем, и запоминается адрес старой оконной процедуры. Для создания суперкласса приложение получает информацию о существующем классе с помощью функции GetClassInfo, запоминает адрес старой оконной процедуры, затем модифицирует полученную структуру WNDCLASS и использует ее при вызове RegisterClass. Сообщения, не обрабатываемые новой оконной процедурой, должны передаваться в старую.

Типы сообщений

Сообщения приходят от разных источников, информируя окна о событиях на различных уровнях ОС. Действия, которые для пользователя могут выглядеть примитивными, на системном уровне могут сопровождаться большим количеством различных сообщений. В качестве примера в табл. 1.1 приведен протокол сообщений, получаемых диалоговым окном при закрытии по нажатию кнопки OK. Приложение может обрабатывать не все сообщения, а только некоторые. Необработанные сообщения передаются обработчику сообщений "по умолчанию" в ОС.

 

Таблица 1.1. Сообщения, посылаемые окну "О программе" приложения MS Word при закрытии окна по нажатию пользователем кнопки OK.

Символич. идентификатор

Описание

WM_LBUTTONDOWN

Была нажата левая кнопка мыши.

WM_PAINT

Требуется перерисовать кнопку OK, т.к. она теперь нажата.

WM_LBUTTONUP

Левая кнопка мыши была отпущена.

WM_PAINT

Требуется перерисовать кнопку OK, т.к. она теперь отпущена.

WM_WINDOWPOSCHANGING

Положение окна на экране собирается изменяться.

WM_WINDOWPOSCHANGED

Положение окна на экране только что было изменено.

WM_NCACTIVATE

Была активизирована область строки заголовка окна.

WM_ACTIVATE

Была активизирована клиентская область окна.

WM_WINDOWPOSCHANGING

Положение окна на экране собирается изменяться.

WM_KILLFOCUS

У окна будет отключен фокус ввода.

WM_DESTROY

Окно уничтожается.

WM_NCDESTROY

Уничтожается область заголовка окна.

 


написать администратору сайта