- Операционная система Microsoft Windows 3.1 для программиста
- 3.2. Стиль окна
- Перекрывающиеся (overlapped) окна
- Временные (pop-up) окна
- Дочерние окна
- Список стилей окна
- Окно Windows: виды, основные элементы
- Окно Windows: что это такое?
- Основные типы окон
- Окна приложений
- Элементы управления окнами программ
- Варианты представления окон и основные операции с ними
- Окна документов
- Диалоговые окна
- Окна контекстных меню
- Всплывающие окна Windows
Операционная система Microsoft Windows 3.1 для программиста
3.2. Стиль окна
Определенный в классе окна стиль класса окна используется при создании на базе этого класса всех окон. Для дальнейшего уточнения внешнего вида и поведения окна используется другая характеристика — стиль окна. Стиль окна указывается при создании окна функцией CreateWindow. В наших примерах основное окно приложения не имело стиля класса окна, но для него был определен стиль окна WS_OVERLAPPEDWINDOW:
Для определения стиля окна используются символические константы с префиксом WS_, определенные в файле windows.h. С помощью этих констант можно определить примерно два десятка стилей окна, однако чаще всего используются несколько основных стилей.
Мы рассмотрим три основных стиля окон — перекрывающиеся окна (overlapped window), временные окна (pop-up window) и дочерние окна (child window).
Перекрывающиеся (overlapped) окна
Перекрывающиеся окна обычно используются в качестве главного окна приложения. Такие окна имеют заголовок (title bar), рамку и, разумеется, внутреннюю часть окна (client region). Дополнительно перекрывающиеся окна могут иметь (а могут и не иметь) системное меню, кнопки для максимального увеличения размера окна и для сворачивания окна в пиктограмму, вертикальную и горизонтальную полосу просмотра (scroll bar) и меню.
В первых версиях операционной системы Windows (версии 1.х) окна располагались рядом и назывались tiled window (tile — черепица). Сейчас такие окна не используются, вместо них появились перекрывающиеся окна, способные перекрывать окна других приложений. Перекрывающиеся окна называются также окнами верхнего уровня (top-level window).
Файл windows.h содержит следующее определение стиля перекрывающегося окна:
В нашем приложении для определения стиля перекрывающегося окна мы использовали символическую константу WS_OVERLAPPEDWINDOW, определенную как логическое ИЛИ нескольких констант:
Константа WS_OVERLAPPED определяет базовый стиль окна — перекрывающееся окно. Стиль WS_OVERLAPPEDWINDOW в добавление к базовому указывает, что окно должно иметь заголовок (константа WS_CAPTION), системное меню (WS_SYSMENU), толстую рамку для изменения размера окна (WS_THICKFRAME), кнопку минимизации размера окна (WS_MINIMIZEBOX) и кнопку для максимального увеличения размера окна (WS_MAXIMIZEBOX). Если окно имеет заголовок, вы можете его перемещать по экрану.
Вы можете попробовать в предыдущем примере изменить стиль окна, создав свой собственный с использованием приведенных выше констант.
Приложение Windows может создавать несколько окон, связанных между собой «узами родства» и «отношениями собственности». В частности, при создании перекрывающегося окна при помощи функции CreateWindow в качестве восьмого параметра функции вы можете указать так называемый идентификатор окна-владельца. Окно-владелец уже должно существовать на момент создания второго окна, имеющего владельца.
Таким образом, если вы создаете несколько перекрывающихся окон, одни окна могут принадлежать другим.
Если окно-хозяин сворачивается в пиктограмму, все окна, которыми оно владеет, становятся невидимыми. Если вы сначала свернули в пиктограмму окно, которым владеет другое окно, а затем и окно-хозяин, пиктограмма первого (подчиненного) окна исчезает.
Если вы уничтожили окно, автоматически уничтожаются и все принадлежащие ему окна.
Обычное перекрывающееся окно, не имеющее окна-владельца, может располагаться в любом месте экрана и принимать любые размеры. Подчиненные окна располагаются всегда над поверхностью окна-владельца, загораживая его.
Координаты создаваемых функцией CreateWindow перекрывающихся окон указываются по отношению ко всему экрану. Таким образом, если вы создаете перекрывающееся окно с координатами (0, 0), оно будет расположено в верхнем левом углу экрана.
Временные (pop-up) окна
Другим базовым стилем является стиль временных окон, которые обычно используются для вывода информационных сообщений и остаются на экране непродолжительное время.
Временные окна имеют стиль WS_POPUP, определенный в файле windows.h следующим образом:
Временные окна, в отличие от перекрывающихся, могут не иметь заголовок (title bar). Если для временного окна определен заголовок, оно может иметь и системное меню. Часто для создания временных окон, имеющих рамку, используется стиль WS_POPUPWINDOW, определенный в файле windows.h следующим образом:
Если надо добавить к временному окну системное меню и заголовок, стиль WS_POPUPWINDOW следует использовать в комбинации со стилем WS_CAPTION, добавляющим заголовок.
Временные окна могут иметь окно владельца и могут сами владеть другими окнами. Все замечания, сделанные нами относительно владения перекрывающимися окнами, справедливы и для временных окон.
Начало системы координат, используемой при создании временных окон, находится в левом верхнем углу экрана. Поэтому при создании временных окон используются экранные координаты (так же, как и при создании перекрывающихся окон).
При изменении размеров временного окна (так же, как и дочернего) функция окна получает сообщение WM_PAINT, в параметрах которого указаны новые размеры окна.
В общем случае вы можете рассматривать временные окна как специальный вид перекрывающихся окон.
Дочерние окна
Дочерние окна чаще всего используются приложениями Windows. Эти окна нужны для создания органов управления, например таких, как кнопки или переключатели. Windows имеет множество классов, на базе которых созданы стандартные органы управления — кнопки, полосы просмотра и т. п. Все эти органы управления представляют собой дочерние окна. Позже вы будете ими активно пользоваться.
Базовый стиль дочерних окон определяется при помощи константы WS_CHILD:
По аналогии с другими базовыми стилями в файле windows.h определена константа WS_CHILDWINDOW, которая полностью эквивалентна константе WS_CHLD:
В отличие от перекрывающихся и временных окон дочерние окна, как правило, не имеют рамки, заголовка, кнопок минимизации и максимального увеличения размера окна, а также полос просмотра. Дочерние окна сами рисуют все, что в них должно быть изображено.
Перечислим особенности дочерних окон.
Само собой разумеется, что дочерние окна должны иметь окно-родителя (окон-сирот не бывает!). Только дочерние окна могут иметь родителей, перекрывающие и временные окна могут иметь окно-хозяина, но не родителя. У дочерних окон могут быть «братья» (или «сестры», кому что больше нравится).
Дочерние окна всегда располагаются на поверхности окна-родителя. При создании дочернего окна начало системы координат расположено в левом верхнем углу внутренней поверхности окна-родителя (но не в верхнем углу экрана, как это было для перекрывающихся и временных окон).
Так как дочерние окна перекрывают окно-родителя, если вы сделаете щелчок мышью над поверхностью дочернего окна, сообщение от мыши попадет в функцию дочернего, но не родительского окна.
При создании дочернего окна в качестве девятого параметра (вместо идентификатора меню, которого не может быть у дочернего окна) функции CreateWindow необходимо указать созданный вами идентификатор дочернего окна. Таким образом, если для какого-либо окна приложения вы создаете несколько дочерних окон, необходимо для каждого окна указать свой идентификатор (типа int). Этот идентификатор будет использован дочерним окном при отправлении сообщений родительскому окну, поэтому вы должны при создании разных дочерних окон использовать разные идентификаторы, хотя это и не обязательно.
Дочернее окно как бы «прилипает» к поверхности родительского окна и перемещается вместе с ним. Оно никогда не может выйти за пределы родительского окна. Все дочерние окна скрываются при сворачивании окна-родителя в пиктограмму и появляются вновь при восстановлении родительского окна.
При изменении размеров родительского окна дочерние окна, на которых отразилось такое изменение (которые вышли за границу окна и появились вновь), получают сообщение WM_PAINT. При изменении размеров родительского окна дочерние окна не получают сообщение WM_SIZE. Это сообщение попадает только в родительское окно.
Список стилей окна
Приведем полный список возможных стилей окна, определенных в виде символических констант в файле windows.h. Некоторые из приведенных здесь стилей будут подробно рассмотрены в соответствующих главах этого тома или в следующих томах «Библиотеки системного программиста».
Имя константы | Описание стиля |
WS_BORDER | Окно с рамкой |
WS_CAPTION | Окно с заголовком. Этот стиль несовместим со стилем WS_DLGFRAME. При использовании стиля WS_CAPTION подразумевается использование стиля WS_BORDER |
WS_CHILD | Дочернее окно. Несовместим со стилем WS_POPUP |
WS_CHILDWINDOW | То же самое, что и WS_CHILD |
WS_CLIPCHILDREN | Этот стиль используется при создании родительского окна. При его использовании родительское окно не перерисовывает свои внутренние области, занятые дочерними окнами |
WS_CLIPSIBLINGS | При указании этого стиля дочерние окна не перерисовывают свои области, перекрытые «братьями», то есть другими дочерними окнами, имеющими тех же родителей |
WS_DISABLED | Вновь созданное окно сразу становится заблокированным (не получает сообщения от мыши и клавиатуры) |
WS_DLGFRAME | Окно с двойной рамкой без заголовка. Несовместим со стилем WS_CAPTION |
WS_GROUP | Определяет первый орган управления в группе органов управления. Используется только в диалоговых панелях |
WS_HSCROLL | В окне создается горизонтальная полоса просмотра |
WS_ICONIC | То же самое, что и WS_MINIMIZE |
WS_MAXIMIZE | Создается окно максимально возможного размера |
WS_MAXIMIZEBOX | Окно содержит кнопку для увеличения его размера до максимально возможного. Этот стиль необходимо использовать вместе со стилями WS_OVERLAPPED или WS_CAPTION, в противном случае указанная кнопка не появится |
WS_MINIMIZE | Создается окно, уменьшенное до предела (свернутое в пиктограмму). Этот стиль необходимо использовать вместе со стилем WS_OVERLAPPED |
WS_MINIMIZEBOX | Окно содержит кнопку для сворачивания окна в пиктограмму (минимизации размеров окна). Этот стиль необходимо использовать вместе со стилем WS_OVERLAPPED или WS_CAPTION, в противном случае указанная кнопка не появится |
WS_OVERLAPPED | Создается перекрывающееся окно, имеющее заголовок и рамку |
WS_OVERLAPPEDWINDOW | Создается перекрывающееся окно, имеющее заголовок, рамку для изменения размера окна, системное меню, кнопки для изменения размеров окна. Этот стиль является комбинацией стилей WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX и WS_MAXIMIZEBOX |
WS_POPUP | Создается временное (pop-up) окно |
WS_POPUPWINDOW | Комбинация стилей WS_POPUP, WS_BORDER и WS_SYSMENU. Для того чтобы сделать системное меню доступным, необходимо дополнительно использовать стиль WS_CAPTION |
WS_SYSMENU | Окно должно иметь системное меню |
WS_TABSTOP | Этот стиль указывает орган управления, на который можно переключиться при помощи клавиши . Данный стиль может быть использован только дочерними окнами в диалоговых панелях |
WS_THICKFRAME | Окно должно иметь толстую рамку для изменения размера окна |
WS_VISIBLE | Создается окно, которое сразу становится видимым. По умолчанию окна создаются невидимыми, и для их отображения требуется вызывать функцию ShowWindow |
WS_VSCROLL | В окне создается вертикальная полоса просмотра |
WS_TILED | Устаревший стиль, аналогичен WS_OVERLAPPED |
WS_SIZEBOX | Устаревший стиль, аналогичен WS_THICKFRAME |
WS_TILEDWINDOW | Устаревший стиль, аналогичен WS_OVERLAPPEDWINDOW |
MDIS_ALLCHILDSTYLES | Этот стиль используется при создании дочерних MDI-окон и определяет окна, которые могут иметь любые комбинации стилей. По умолчанию дочерние MDI-окна имеют стили WS_MINIMIZE, WS_MAXIMIZE, WS_VSCROLL, WS_HSCROLL |
Приведенные выше стили не всегда совместимы друг с другом. Например, перекрывающееся окно не может быть одновременно еще и временным. Пользуясь приведенной ниже таблицей, вы сможете определить совместимость стилей. В этой таблице символом «+» отмечены стили, которые можно использовать для создания перекрывающихся, временных и дочерних окон.
Окно Windows: виды, основные элементы
Название операционной системы Windows переводится как «окна». Такой вариант представления и организации программных компонентов и элементов управления ими позволяет очень просто и удобно взаимодействовать с графическим интерфейсом системы. Далее, будут рассмотрены основные типы окон, которые могут появляться, а также некоторые элементы и действия с ними.
Окно Windows: что это такое?
Для определения сути этого термина, следует исходить из самой обычной его трактовки. Нетрудно догадаться, что окно Windows представляет собой прямоугольную область графического интерфейса на экране компьютерного монитора, в которой отображаются программы, документы, уведомления, подсказки и т. д.
Все окна можно разделить на два основных типа: с изменяемым и неизменяемым размером. Окно Windows с изменяемым размером можно встретить в отображении программ. Неизменяемый размер в основном применяется для окон документов, сообщений и всплывающих подсказок.
Кроме того, есть некоторые разновидности окон (чаще всего это сообщения), которые закрыть стандартным способом невозможно (кнопка с крестиком в окне отсутствует). Избавиться от таких уведомлений можно только путем нажатия на специальные кнопки внутри окна. Однако можно встретить и окна критических ошибок, которые не закрываются вообще (избавиться от них помогает только принудительная перезагрузка системы)
Основные типы окон
Итак, что представляет собой окно Windows, разобрались. Теперь посмотрим на основные типы окон, которые можно встретить в этой операционной системе. Среди основных видов выделяют следующие:
- окна приложений;
- окна документов;
- диалоговые окна;
- окна контекстных меню;
- всплывающие окна.
Окна программ и документов, которые в них созданы, между собой взаимосвязаны. Но окно приложения может отображаться само по себе (пустой документ), а окно документа без программы существовать отдельно не может. Это так называемый тип «окно в окне». Windows 10 или любая другая система – тому яркое подтверждение.
Кроме того, окно в окне достаточно часто можно встретить и в интернете, например, при просмотре фильма или прослушивании музыки онлайн, когда в качестве основного окна выступает оболочка веб-браузера, а в качестве второго – встроенный на ресурсе медиаплеер.
Окна приложений
Данный тип окон является самым большим классом в графическом интерфейсе системы, поскольку ее функционирование изначально построено на выполнении той или иной программы.
Окна программ Windows-систем представляют собой некую рабочую область, в которой создаются, редактируются или упорядочиваются документы и, в зависимости от типа и назначения приложения, могут присутствовать совершенно разные инструменты и элементы управления.
Элементы управления окнами программ
Однако для всех окон приложений можно выделить несколько общих элементов. В частности, это касается трех кнопок, которые обычно располагаются в правом верхнем углу.
Кнопка с крестиком предназначена для быстрого завершения работы программы. Кнопка с двумя квадратиками позволяет быстро уменьшить размер окна, после чего меняется на кнопку с одним квадратиком для быстрого развертывания основного окна во весь экран. Кнопка с нижней черточкой служит для сворачивания основного окна либо в «Панель задач» (но программа или редактируемый документ остаются активными в фоновом режиме, не мешая выполнению других процессов и приложений), либо в системный трей.
Также любое окно Windows-программы или стороннего разработчика может содержать специальную «шапку» с названием самого приложения и именем документа, при помощи нажатия на ней и удерживания кнопки мыши окно можно перетащить в любую область экрана (только при условии, что приложение в данный момент не работает в полноэкранном режиме), либо произвести быструю смену размера двойным кликом, что соответствует нажатию кнопки с квадратиком или двумя, как было указано выше.
Ниже, как правило, располагается специальная панель с инструментами самой программы, еще ниже находится рабочая область окна документа, в самом низу располагается строка состояния, в которой может отображаться текущая информация по самому документу, его параметрам, выполняемым в данный момент действиям и т. д. В некоторых приложениях она может отсутствовать вообще. В «родных» программах Windows она тоже может не отображаться по причине деактивации.
По бокам, чаще всего справа (или слева) и внизу (реже – сверху), находятся полосы прокрутки, которые позволяют перемещаться по невидимым в данный момент областям инструментария самой программы или редактируемого документа.
Варианты представления окон и основные операции с ними
Что касается представления и управления окнами Windows, для начала посмотрим на их вид. В зависимости от версии ОС, они могут выглядеть по-разному.
Так, например, в Windows 7 окна, вернее их некоторые элементы, являются полупрозрачными, поскольку изначально в самом интерфейсе системы установлен такой эффект (Aero), в Windows XP или Vista оформление объемное. В восьмой и десятой модификациях по причине применения интерфейса Metro все плоское.
Но в плане управления все окна имеют несколько общих правил. Если не используется полноэкранный режим, их можно перетягивать при зажатой левой кнопке мыши в любое место экрана, менять размер горизонтально и вертикально, устанавливая курсор на боковые границы, или производить пропорциональное изменение размера, установив курсор на угол окна.
Кроме того, одновременно открытые окна могут быть активными и неактивными (это видно по изменению цвета «шапки»), но активное окно всегда располагается на переднем плане. Чтобы активировать неактивное окно, достаточно перевести на него курсор и нажать левую кнопку мыши, хотя перемещаться между ними можно и при помощи сочетания Alt + Tab (собственно, такой метод подходит для всех программ, даже если они использует полноэкранный режим).
Наконец, кнопка или отдельно вызываемая команда «Свернуть все окна» в Windows-системах сворачивает все активные и неактивные окна программ в «Панель задач».
Окна документов
Этот тип окон представляет собой исключительно рабочую область в которой производится создание или редактирование информации определенного типа.
Эта область реагирует на действия с инструментарием основной программы, на ввод с клавиатуры или с другого источника. В частности, программы для создания музыки или редактирования звука воспринимают сигналы MIDI-клавиатур, подключенных электронных инструментов, микрофонов или внешних аудиовходов.
Диалоговые окна
Такие окна, как правило, либо уже имеются в каком-то приложении или на интернет-ресурсе, либо операционная система выводит их на экран самостоятельно.
Суть их появления состоит в том, что пользователю предоставляется некий выбор действий, без подтверждения которых дальнейшая работа программы или переход в следующей функции невозможны. В таких окнах могут содержаться списки или кнопки вроде «Да» («ОК»), «Нет», «Принять», «Отказаться», «Игнорировать», «Пропустить», «Повторить», «Отменить» и т. д. Иными словами, с точки зрения программирования, здесь применяется общеизвестный принцип «да, нет, иначе».
Окна контекстных меню
Этот тип окон обычно скрыт от глаз пользователя и вызывается в основном правым кликом. Такие меню содержат некоторые дополнительные команды, которые могут быть недоступными при использовании основных средств программы.
В самих Windows-системах сюда же интегрируются дополнительные строки, например, архиваторов, антивирусов, анлокеров и т. д.
Всплывающие окна Windows
Наконец, этот тип окон представляет собой разного рода подсказки или уведомления при совершении или требовании/предложении совершения каких-либо действий.
Системные уведомления чаще всего появляются в трее и оформлены в виде желтых прямоугольников. Другие подсказки могут возникать при наведении на них курсора в определенном месте рабочей области программы.