Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
экзамен СП.docx
Скачиваний:
13
Добавлен:
22.04.2019
Размер:
515.86 Кб
Скачать

14. Приложения Windows (Win 32), разновидности. Структура оконных (windowed) приложений.

Структура приложения Win 32 и основные определения

Основные определения

Программа,

Окно (window) – базовое понятие графического интерфейса пользователя (GUI) и основной объект внутрисистемного взаимодействия в ОС Windows. Окна играют роль интерфейса прочих структурных элементов программы, как для пользователя (графический объект), так и для других программ, включая системные (получатель сообщений)

Приложение – программа с окном, в определенной структуре

Процесс – обычно "невидимая" программа

Поток – единица планирования времени выполнения программ.

2. Особенности приложений Win 32.

1) Многозадачная среда выполнения

2) Подконтрольность операционной системе.

Как следствие:

определенная регламентируемая структура;

составные части программы и объекты, с которыми она работает, известны системе и контролируются ею;

унифицированный механизм взаимодействия программ внутри себя и друг с другом;

выполнение всех операций ввода-вывода и управления любыми объектами и ресурсами посредством вызовов ОС.

3. Событийное управление

Сообщения и события. Их функция и обработка в Win 32.

Источник, получатель и обработчик сообщений.

4. Структура приложения

Головной модуль

Цикл обработки сообщений: извлечение, трансляция, обработка.

Генерация сообщений.

Примеры использования сообщений

15. Окно Win32: назначение, виды, свойства. Оконные классы.

16. Создание окон, управление окнами.

 Окна ( 15 16 )

Окно (window) –представляет собой прямоугольную (специальными методами можно задать иную форму) часть экрана, в которой приложение производит отображение выводимой информации и из которой получает вводимую информацию. Кроме того, окно является получателем сообщений.

При загрузке Windows всегда создается окно, занимающее весь экран – Desktop window. Каждое Windows-приложение, использующее стандартные интерфейсы Windows (Windows-based приложение), создает хотя бы одно окно, называемое главным окном приложения (возможно, невидимое). Многие приложения создают еще дополнительные окна.

В каждый момент времени только одно окно в системе может получать вводимую информацию – т.н. активное окно. Пользователь может использовать клавиатуру, мышь или другое устройство ввода для взаимодействия с окном.

...

Приложения могут использовать различные типы окон:

– элементы управления (controls)

– окна диалога (dialog boxes)

– окна сообщений (message boxes)

Словосочетание "Handle of a window" имеет также и вполне обычный "литературный" смысл — оно переводится как просто "оконная ручка"!

Иерархия окон

Windows управляет каждым окном в зависимости от отношений этого окна с другими окнами системы. Информация о взаимоотношениях окон хранится в списке диспетчера окон (window manager's list). Каждое окно в этом списке определяется специальной структурой, внутри которой нам интересны четыре поля:

– описатель родительского окна

– описатель окна - хозяина

– описатель дочернего окна

– описатель следующего окна в списке братьев

При загрузке Windows создает окно рабочего стола (Desktop window). Это окно занимает весь экран. Это окно всегда лежит в начале списка диспетчера окон. Следующий уровень иерархии составляют окна верхнего уровня (top-level windows). К таким окнам относятся все не-дочерние окна. Окна верхнего уровня соединяются с окном рабочего стола следующим образом:

– каждое окно ссылается на окно рабочего стола как на родительское

– окно рабочего стола ссылается на самое верхнее окно из окон верхнего уровня

– все окна верхнего уровня, кроме самого нижнего, ссылаются друг на друга, образуя однонаправленный связный список братьев. Порядок расположения окон в этом списке определяет очередность перекрытия окон.

Окна верхнего уровня могут так же вступить в отношения владения. Если при порождении окна указать в качестве окна владельца окно не верхнего уровня, то система поднимется по цепочке родительских окон и назначит в качестве хозяина соответствующее окно верхнего уровня. Окно диалога всегда принадлежит породившему его окну, за исключением тех случаев, когда оно порождается как дочернее.

Любые окна могут иметь дочерние окна. При этом каждое окно содержит указатель на начало списка дочерних окон. В системе могут образовываться весьма сложные и разветвленные структуры.

Окна, существующие в любой момент в системе, образуют определенную иерархию.

Отношение предок-потомок (родитель-ребенок)

Окно может иметь родительское окно (parent window). В таком случае оно называется дочерним окном или окном-потомком (child window) по отношению к родительскому. Дочернее окно никогда не выходит за границы родительского, по умолчанию имеет только клиентскую область, но дополнительно дополнительно можно задать любые элементы, кроме меню. Действия, производимые с родительским окном, имеют влияние также и на дочерние:

– уничтожение – уничтожение перед родительским;

– скрытие – скрытие перед родительским;

– перемещение – перемещение вместе с родительским;

– отображение – отображение после родительского.

Окна-потомки обычно используются при организации т.н. многодокументного интерфейса (multi-document interface – MDI)

Отношение владелец-подчиненный

Окно также может иметь окно-хозяина, или владельца (owner window). Это другой тип отношений между окнами. Окно всегда располагается поверх хозяина и сворачивается и уничтожается вместе с ним.

Особенности передачи сообщений владельцу и подчиненному.

Создание окна

Для порождения окна (в том числе и главного окна приложения) используется функция CreateWindow (или CreateWindowEx). В общем случае приложение, создающее окно, должно определить следующие характеристики, передаваемые в качестве параметров:

1) имя класса окна (window class)

2) заголовок приложения, имя окна (window name)

3) стиль окна (window style)

4) 2 целочисленных значения – координаты левого верхнего угла окна (location)

5) 2 целочисленных значения – размеры окна (size)

6) описатель родительского окна или окна-хозяина (parent or owner window), NULL если независимое окно (т.е. владелец – система)

7) дентификатор дочернего окна (для окон-потомков) или описатель меню (для окон верхнего уровня) (child-window identifier or menu handle)

8) описатель экземпляра программы (instance handle)

9) дополнительные данные (creation data) (??)

(??)– место в порядке расположения (position in the Z-order)

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

Базовую информацию об окне можно получить, например, с помощью функции GetWindowInfo.

Класс окна

Каждое окно в системе относится к какому-либо оконному классу. Окна одного класса однотипны и работают одинаково. Это связано с тем, что класс окна определяет, во-первых, ряд внешних атрибутов (форму курсора, параметры фона, пиктограмму), а, во-вторых, все окна одного класса работают с одной и той же функцией окна.

Функция окна – специальная функция, которая назначается классу окна. Для посылки окну сообщения операционная система вызывает эту функцию и передает ей в качестве параметров код сообщения и другую уточняющую информацию.

Существует три типа оконных классов:

1) Системные глобальные классы – классы, которые регистрируются при загрузке операционной системы. К таким классам относятся классы элементов управления (кнопки, списки, полосы прокрутки и т.д.)

2) Прикладные глобальные классы – классы, которые регистрируются динамически связываемыми библиотеками (DLL) и доступны всем приложениям системы

3) Прикладные локальные классы – классы, которые приложения регистрируют для своего внутреннего использования.

Для регистрации классов используются функции RegsterClass или RegisterClassEx. В функцию регистрации передается адрес структуры типа WNDCLASS, содержащей следующую информацию:

lpszClassName – имя класса окна;

style – стиль окна, именованная константа, задающая дополнительные параметры окна внутри класса; так, например, окно класса “полоса прокрутки” может иметь стили SBS_HORZ или SBS_VERT, определяющие направление прокрутки. Константы стилей могут объединяться по ИЛИ.

hInstance – описатель программы – владельца окна;

lpfnWndProc – указатель на оконную процедуру;

hIcon – описатель значка приложения (стандартного или загружаемого), или NULL (значок по умолчанию);

hCursor – описатель курсора приложения (стандартного или загружаемого), или NULL (курсором можно и нужно будет управлять самостоятельно);

hbrBackground – описатель кисти фона (см. описание графической подсистемы), константа (одна из стандартных) или создается программой;

lpszMenuName – имя меню (??)

cbClsExtra – дополнительная информация класса;

cbWndExtra – дополнительная информация окна.

3) Окно-родитель или окно-владелец – описатель окна, которому подчинено данное окно, или NULL, если окно независимо.

4) Размеры окна и координаты в пикселах, отсчитываемые от левого верхнего угла экрана, место в порядке расположения

5) Позиция (место) окна при перекрытии.

6) Идентификатор дочернего окна (если создаваемое окно является дочерним).

7) Описатель меню для окна, не являющегося дочерним.

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

8) Описатель экземпляра программы, создающей окно.

9) Дополнительные данные. Определяемый приложением блок данных, который будет передан процедуре окна при порождении в качестве одного из параметров. В случае Windows 95 размер корректно обрабатываемого блока ограничен 40 байтами.

Некоторые стили окон:

WS_OVERLAPPED (перекрывающиеся) – окна верхнего уровня с заголовком и границей и клиентской областью.

WS_OVERLAPPEDWINDOW (перекрывающиеся) – окна верхнего уровня с заголовком, границей, системным меню, кнопками минимизации и максимизации и клиентской областью, используются в качестве главного окна приложения.

WS_POPUP (всплывающие) – окна диалога, размещаемые поверх клиентской области главного окна.

WS_POPUPWINDOW (всплывающие) – окна диалога с системным меню и границей.

WS_CHILD (окна-потомки) – очевидно, характеристику см. выше.

WS_CLIPCHILDREN (??) – дополнительный стиль окна-предка, не позволяющий ему прорисовку поверх окна-потомка (см. GDI).

WS_CLIPSIBLINGS (??) – дополнительный стиль, запрещающий прорисовку поверх окон одного уровня “родственности”

WS_CAPTION (заголовок) – дополнительный стиль, добавляет окну заголовок, если можно.

WS_BORDER (тонкая рамка),

WS_DLGFRAME (двойная рамка для окон диалога, не может иметь заголовка),

WS_EX_DLGMODALFRAME (аналогично WS_DLGFRAME, но может быть комбинировано с WS_CAPTION для создания заголовка),

WS_EX_STATICEDGE (заголовок для окон без возможности ввода, например элемент static),

WS_THICKFRAME (толстая рамка окон с изменяющимся размером)

WS_HSCROLL (горизонтальная полоса прокрутки),

WS_MAXIMIZEBOX (кнопка максимизации),

WS_MINIMIZEBOX (кнопка минимизации),

WS_SYSMENU (системное меню),

WS_VSCROLL (вертикальная полоса прокрутки).

WS_DISABLED (окно не получает ввод),

WS_MAXIMIZE, WS_MINIMIZE (окно создается соответственно максимизированным или минимизированном виде),

WS_VISIBLE (окно порождается видимым, иначе для его необходимо вызов ShowWindow()).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]