Как вывести окно
Перейти к содержимому

Как вывести окно

Горячие клавиши для работы с окнами в Windows

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

Горячие клавиши Windows для работы с окнами

Переключение между окнами в Windows

Windows 10 имеет очень удобный инструмент, часто называемый «переключатель задач». Он позволяет использовать клавиатуру для быстрого переключения между активными окнами. Просто нажмите Alt + Tab в любое время работы с Windows и на экране появятся миниатюры всех открытых окон.

Для циклического перехода между вариантами нажмите и удерживайте Alt и нажимайте клавишу Tab, пока не будет выделено нужное окно. Отпустите обе клавиши, и окно будет выведено на передний план.

Переключение между окнами в Windows

Вы также можете нажать Ctrl + Alt + Tab, чтобы открыть переключатель задач. При вводе такой комбинации окно с задачами остается постоянно висеть даже после отпускания клавиш. Вам остается лишь с помощью кнопок курсора выбрать нужное окно и нажать «Ввод». Переключатель исчезнет.

Более сложным способом переключения между окнами является Представление задач. Оно занимает практически весь экран и показывает большие превью всех открытых окон. Чтобы открыть Представление задач, нажмите Windows + Tab.

Переключение между окнами в Windows

С помощью клавиш курсора выберите окно, которое вы хотите просмотреть, а затем нажмите «Ввод». Выбранное вами окно выведется на передний план. В Представлении задач можно создавать новые рабочие столы и сортировать по ним программы.

Как свернуть и развернуть окна в Windows при помощи «горячих» клавиш

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

Используйте следующие сочетания клавиш:

  • Свернуть текущее окно:Windows + Стрелка вниз.
  • Развернуть текущее окно на весь экран: Windows + Стрелка вверх.
  • Свернуть все окна: Windows + M.
  • Свернуть все окна и показать рабочий стол: Windows + D. (Это работает и с окнами, которые напрямую свернуть нельзя).
  • Свернуть все окна, кроме текущего активного: Windows + Home. Очень полезно, когда требуется сосредоточиться на работе с одним окном.
  • Восстановление всех свернутых окон:Windows + Shift + M.

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

Как привязать окна к половине или четверти рабочего стола в Windows

Если вы работаете с несколькими окнами и хотите использовать сочетания клавиш для удобного расположения элементов на экране, то вам повезло! Легко расположить два окна в идеальные половины или четыре окна по четвертям на экране.

Сначала нажмите Alt + Tab или используйте мышь, чтобы открыть окно, требуемое для помещения в фокус окно. Сразу решите, какую часть экрана вы хотите занять этим окном.

Затем вы можете использовать следующие сочетания клавиш, чтобы расположить два окна пополам:

Развернуть слева: Windows + Стрелка влево.

Как привязать окна к половине или четверти рабочего стола в Windows

Развернуть справа: Windows + Стрелка вправо.

Как привязать окна к половине или четверти рабочего стола в Windows

Чтобы расположить четыре окна по четвертям (каждое будет занимать 1/4 экрана), вы можете использовать последовательность из двух комбинаций клавиш. Эти последовательности предполагают, что окно еще не было привязано к левой или правой половине экрана.

Вот что нужно сделать:

Верхняя левая четверть: Windows + Стрелка влево, а затем Windows + Стрелка вверх.

Нижняя левая четверть: Windows + Стрелка влево, а затем Windows + Стрелка вниз.

Как привязать окна к половине или четверти рабочего стола в Windows

Верхняя правая четверть: Windows + Стрелка вправо, а затем Windows + Стрелка вверх.

Как привязать окна к половине или четверти рабочего стола в Windows

Нижняя правая четверть: Windows + Стрелка вправо, а затем Windows + Стрелка вниз.

Точное перемещение окна в Windows

Вы можете использовать клавиатуру, чтобы переместить определенное окно в нужное место на экране. Сначала нажмите Alt + Tab, чтобы выбрать окно, которое вы хотите переместить.

Когда окно выбрано, нажмите Alt + Пробел, чтобы открыть небольшое меню в верхнем левом углу. Нажмите клавишу курсора Вниз, чтобы перейти на «Переместить», а затем нажмите «Ввод».

Используйте клавиши курсора со стрелками, чтобы переместить окно туда, где оно должно расположиться в конечном счете на экране, а затем нажмите «Ввод».

Этот прием работает, даже если окно, которое вы хотите переместить, скрыто или оказалось за пределами экрана, и вы не можете найти его с помощью мыши.

Перемещение окон между дисплеями в Windows

Если вы используете несколько мониторов и развернули рабочий стол между ними, вы можете быстро перемещать активное окно между экранами. Для этого нажмите Windows + Shift + Стрелку влево или Windows + Shift + Стрелку вправо.

Шпаргалка по управлению окнами в Windows

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

Alt + Tab: открыть переключатель задач.

Windows + Tab: Открыть Представление задач.

Windows + Стрелка вниз: свернуть окно.

Windows + Стрелка вверх: развернуть окно.

Windows + M: свернуть все окна.

Windows + D: отображение рабочего стола.

Windows + Home: свернуть все окна, кроме активного.

Windows + Shift + M: восстановить все свернутые окна.

Windows + Shift + Стрелка вверх: растянуть окно к верхней и нижней части экрана.

Windows + Стрелка влево: развернуть окно в левой части экрана.

Windows + Стрелка вправо: развернуть окно в правой части экрана.

Windows + Shift + Стрелка влево или вправо: перемещение окна с одного монитора на другой.

Открытие окон и методы window

Материал на этой странице устарел, поэтому скрыт из оглавления сайта.

Более новая информация по этой теме находится на странице https://learn.javascript.ru/popup-windows.

Всплывающее окно («попап» – от англ. Popup window) – один из старейших способов показать пользователю ещё один документ.

В этой статье мы рассмотрим открытие окон и ряд тонких моментов, которые с этим связаны.

…При запуске откроется новое окно с указанным URL.

Большинство браузеров по умолчанию создают новую вкладку вместо отдельного окна, но чуть далее мы увидим, что можно и «заказать» именно окно.

Блокировщик всплывающих окон

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

Всплывающее окно блокируется в том случае, если вызов window.open произошёл не в результате действия посетителя.

Как же браузер понимает – посетитель вызвал открытие окна или нет?

Для этого при работе скрипта он хранит внутренний «флаг», который говорит – инициировал посетитель выполнение или нет. Например, при клике на кнопку весь код, который выполнится в результате, включая вложенные вызовы, будет иметь флаг «инициировано посетителем» и попапы при этом разрешены.

А если код был на странице и выполнился автоматически при её загрузке – у него этого флага не будет. Попапы будут заблокированы.

Полный синтаксис window.open

Функция возвращает ссылку на объект window нового окна, либо null , если окно было заблокировано браузером.

url URL для загрузки в новое окно. name Имя нового окна. Может быть использовано в параметре target в формах. Если позднее вызвать window.open() с тем же именем, то браузеры (кроме IE) заменяют существующее окно на новое. params Строка с конфигурацией для нового окна. Состоит из параметров, перечисленных через запятую. Пробелов в ней быть не должно.

Значения параметров params .

  1. Настройки расположения окна:

Координаты верхнего левого угла относительно экрана. Ограничение: новое окно не может быть позиционировано за пределами экрана.

Ширина/высота нового окна. Минимальные значения ограничены, так что невозможно создать невидимое окно с нулевыми размерами.

Если координаты и размеры не указаны, то обычно браузер открывает не окно, а новую вкладку.

  1. Свойства окна:
  1. Ещё есть небольшое количество не кросс-браузерных свойств, которые обычно не используются. Вы можете узнать о них в документации, например MDN: window.open.

Браузер подходит к этим параметрам интеллектуально. Он может проигнорировать их часть или даже все, они скорее являются «пожеланиями», нежели «требованиями».

  • Если при вызове open указан только первый параметр, параметр отсутствует, то используются параметры по умолчанию. Обычно при этом будет открыто не окно, а вкладка, что зачастую более удобно.
  • Если указана строка с параметрами, но некоторые yes/no параметры отсутствуют, то браузер выставляет их в no . Поэтому убедитесь, что все нужные вам параметры выставлены в yes .
  • Когда не указан top/left , то браузер откроет окно с небольшим смещением относительно левого верхнего угла последнего открытого окна.
  • Если не указаны width/height , новое окно будет такого же размера, как последнее открытое.

Доступ к новому окну

Вызов window.open возвращает ссылку на новое окно. Она может быть использована для манипуляции свойствами окна, изменения URL, доступа к его переменным и т.п.

В примере ниже мы заполняем новое окно содержимым целиком из JavaScript:

А здесь модифицируем содержимое после загрузки:

Обратим внимание: сразу после window.open новое окно ещё не загружено. Это демонстрирует alert в строке (*) . Поэтому в примере выше окно модифицируется при onload . Можно было и поставить обработчик на DOMContentLoaded для newWin.document .

Связь между окнами – двухсторонняя.

Родительское окно получает ссылку на новое через window.open , а дочернее – ссылку на родителя window.opener .

Оно тоже может его модифицировать.

Если запустить пример ниже, то новое окно заменит содержимое текущего на ‘Test’ :

Большинство действий, особенно получение содержимого окна и его переменных, возможны лишь в том случае, если URL нового окна происходит из того же источника (англ. – «Same Origin»), т.е. совпадают домен, протокол и порт.

Иначе говоря, если новое окно содержит документ с того же сайта.

Больше информации об этом будет позже, в главе Кросс-доменные ограничения и их обход.

События

Наиболее важные события при работе с окном браузера:

  • onresize – событие изменения размера окна.
  • onscroll – событие при прокрутке окна.
  • onload – полностью загрузилась страница со всеми ресурсами.
  • onfocus/onblur – получение/потеря фокуса.

Методы и свойства

Перемещение и изменение размеров окна

Существует несколько методов для перемещения/изменения размеров окна.

win.moveBy(x,y) Перемещает окно относительно текущего положения на x пикселей вправо и y пикселей вниз. Допускаются отрицательные значения. win.moveTo(x,y) Передвигает окно в заданную координатами x и y точку экрана монитора. win.resizeBy(width,height) Изменяет размер окна на заданную величину width/height (ширина/высота). Допускаются отрицательные значения. win.resizeTo(width,height) Изменяет размер окна на заданное значение.

Чтобы предотвратить использование этих методов с плохими целями, браузеры часто блокируют их выполнение. Как правило, они работают, если окно win открыто вызовом window.open из JavaScript текущей страницы и в нём нет дополнительных вкладок.

Заметим, что JavaScript не может ни свернуть ни развернуть ни «максимизировать» (Windows) окно.

Эти функции операционной системы от Frontend-разработчиков скрыты. Вызовы, описанные выше, в случае свёрнутого или максимизированного окна не работают.

Прокрутка окна

Прокрутка окна требуется, пожалуй, чаще всего. Мы уже говорили о ней в главе Размеры и прокрутка страницы:

win.scrollBy(x,y) Прокрутка окна на заданное число пикселей вперёд или назад. Допускаются отрицательные значения. win.scrollTo(x,y) Прокручивает окно к заданным координатам. elem.scrollIntoView(top) Этот метод прокрутки вызывается на элементе. При этом окно прокручивается так, чтобы элемент был полностью видим. Если параметр top равен true или не задан, то верх элемента совпадает с верхом окна. Если он равен false , то окно прокручивается так, чтобы нижний край элемента совпал с нижним краем окна.

Итого

  • Всплывающее окно открывается с помощью вызова window.open(url, name, params) .
  • Метод window.open возвращает ссылку на новое окно или null , если окно было заблокировано.
  • Современные браузеры блокируют окна, если window.open вызвано не в результате действия посетителя.
  • Обычно открывается вкладка, но если заданы размеры и позиция – то именно окно.
  • Новое окно имеет ссылку на родительское в window.opener .
  • Окна могут общаться между собой как угодно, если они из одного источника. Иначе действуют жёсткие ограничения безопасности.

Всплывающие окна используются нечасто. Ведь загрузить новую информацию можно динамически, с помощью технологии AJAX, а показать – в элементе <div> , расположенным над страницей ( z-index ). Ещё одна альтернатива – тег <iframe> .

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

Если вы хотите использовать всплывающее окно, предупредите посетителя об этом, так же и при использовании target="_blank" в ссылках или формах. Иконка открывающегося окошка на ссылке поможет посетителю понять, что происходит и не потерять оба окна из поля зрения.

3.1 Открытие и управление окнами

От переводчика: данная статья является девятой в цикле переводов официального руководства по библиотеке SFML. Прошлую статью можно найти тут. Данный цикл статей ставит своей целью предоставить людям, не знающим язык оригинала, возможность ознакомится с этой библиотекой. SFML — это простая и кроссплатформенная мультимедиа библиотека. SFML обеспечивает простой интерфейс для разработки игр и прочих мультимедийных приложений. Оригинальную статью можно найти тут. Посвящается Еве Вайт. С днем рождения;). Начнем.

1. Приступая к работе

  1. Рисование 2D объектов
  2. Спрайты и текстуры
  3. Текст и шрифты
  4. Формы
  5. Проектирование ваших собственных объектов с помощью массивов вершин
  6. Позиция, вращение, масштаб: преобразование объектов
  7. Добавление специальных эффектов с шейдерами
  8. Контроль 2D камеры и вида
  1. Проигрывание звуков и музыки
  2. Запись аудио
  3. Пользовательские потоки аудио
  4. Спатиализация: звуки в 3D
  1. Коммуникация с использованием сокетов
  2. Использование и расширение пакетов
  3. Веб-запросы с помощью HTTP
  4. Передача файлов с помощью FTP

Вступление

Эта статья объясняет, как открыть и управлять окном. Рисование в окне выходит за пределы задач, решаемых модулем sfml-window ; эту задачу решает модуль sfml-graphics . Однако управление окном с использование модуля sfml-graphics выполняется также, так что чтение данной статьи важно в любом случае.

Открытие окна

В SFML окна представлены классом sf::Window. Окно может быть создано напрямую из конструктора данного класса:

Первый аргумент — видео режим, определяет размер создаваемого окна (размер области окна, без заголовка окна и границ). Тут мы создали окно размером 800×600 пикселей.

Класс sf::VideoMode имеет интересные статические функции, с помощью которых можно получить разрешение рабочего стола или доступные видео режимы. Советуем посмотреть документацию по этому классу.

Второй аргумент — имя создаваемого окна.

Конструктор класса sf::Window может принять и третий аргумент: стиль, который позволяет вам выбрать, какие украшения и функции вы хотите использовать.

Вы можете использовать любую комбинацию следующих стилей:

sf::Style::None Никаких украшений (используется, например, для загрузочных экранов); этот стиль не может быть использован с другими
sf::Style::Titlebar У окна есть заголовок
sf::Style::Resize Можно изменить размер окна и появляется кнопка открытие на весь экран
sf::Style::Close У окна появляется кнопка закрытия
sf::Style::Fullscreen Окно открывается в полноэкранном режиме; этот стиль не может быть скомбинирован с другими и требует доступный видео режим
sf::Style::Default Стандартный стиль, который является сокращение Titlebar | Resize | Close

Также есть четвертый аргумент, определяющий специфичные опции OpenGL. Эта тема рассматривается более подробно в статье по OpenGL.

Если вы хотите создать окно после создания экземпляра sf::Window или создать окно заново, с другим видео режимом или названием, вы можете использовать функцию create . Она принимает те же аргументы, что и конструктор класса.

Оживление окна

Если вы попробуете выполнить код выше (удалив «. «), вы вряд ли что-то увидите. Во-первых, потому что программа завершается немедленно. Во-вторых, потому что программа не обрабатывает события; так что, даже если вы добавили этот код в бесконечный цикл, вы увидите мертвое окно, которое не может быть перемещено или закрыто.

Давайте добавим немного кода, что бы сделать эту программу более интересной:

Код выше открывает окно и уничтожает его, когда пользователь закрывает его. Давайте посмотрим более детально, как он работает:

Во-первых, мы добавили цикл, который гарантирует, что приложение будет обновляться/дополняться до закрытия окна. Большинство (если не все) SFML программы будут иметь схожую конструкцию; иногда этот цикл называется main loop или game loop.

Затем, первое, что мы хотим сделать внутри нашего цикла — проверить наличие необработанных событий. Обратите внимание, что мы используем цикл while так, чтобы обработать все ожидающие обработки события. Функция pollEvent возвращает true , если есть события, ожидающие обработки, или false , если их нет.

Всякий раз, когда происходит событие, мы должны проверить его тип (закрытие окна? нажатие клавиши? перемещение мыши? подключение джойстика? . ), и, если мы заинтересованы в этом, отреагировать соответствующим образом. Здесь мы проверяем только то, произошло ли событие Event::Closed , которое срабатывает, если пользователь попытается закрыть окно. В этот момент окно еще открыто и мы должны закрыть его явным образом с помощью следующих функций. Это позволяет вам сделать что-то перед закрытием окна, например, сохранить текущее состояние приложения или отобразить сообщение.

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

После того, как окно закрылось, основной цикл завершается и программа завершает свое выполнение.

В этот момент, вы, наверное, заметили, что мы не говорили о рисовании чего-то в окне. Как указывалось во введении, это не задача модуля sfml-window . Рисование объектов (спрайтов, текста или фигур) будет обсуждаться в статьях по sfml-graphics .

Чтобы что-то рисовать, вы также можете использовать OpenGL напрямую и игнорировать модуль sfml-graphics . sf::Window создает OpenGL контекст и готова к принятию вызовов к OpenGL. Вы можете более подробно ознакомиться с данной темой в статье по использованию OpenGL.

Не ожидайте увидеть что-то интересное в новом окне: мы можете увидеть какой-нибудь цвет (черный или белый), или содержимое прошлого приложения, использовавшего OpenGL, или… что-то еще.

Играемся с окном

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

Вы можете обратиться к документации по API для получения полного списка функций sf::Window.

В случае, если вам действительно нужны расширенный функционал для вашего окна, вы можете создать одно окно с помощью другой библиотекой и внедрить его в SFML. Чтобы это сделать, вы можете использовать другой конструктор или создать функцию, которая передает sf::Window дескриптор существующего окна. В этом случае, SFML будет создавать контекст рисования внутри переданного окна и отлавливать все события без вмешательства в родительский менеджер окна.

Если вам нужна дополнительная, очень специфичная функция, вы можете сделать иначе: создать окно SFML, получить его дескриптор и сделать то, чего не позволяет SFML.

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

Контроль кадровой частоты

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

Решением этой проблемы является активизация вертикальной синхронизации. Синхронизация производится автоматически видеокартой и может быть просто включена или выключена с помощью функции setVerticalSyncEnabled :

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

Иногда вызов setVerticalSyncEnabled не дает никакого эффекта: скорее всего, потому что вертикальная синхронизация выключена в настройках драйвера вашей видеокарты. Вы должны включить опцию «controlled by application» в настройках видеодрайвера.

Вы можете захотеть, чтобы ваше приложение работало на заданной кадровой частоте, вместо частоты обновления монитора. Это может быть достигнуто с помощью вызова setFramerateLimit :

В отличие от setVerticalSyncEnabled , эта функция реализована SFML и использует комбинация sf::Clock и sf::sleep . Важно отметить, что эта функция не является надежной на 100%, особенно для высокой кадровой частоты: возможности sf::sleep зависят от ОС и оборудования; минимальное время приостановки составляет 10-15 миллисекунд. Не полагайтесь на эту функцию, если вы создаете приложение, сильно зависящее от времени.

Никогда не используйте setVerticalSyncEnabled и setFramerateLimit вместе. Это может вызвать плохие последствия.

Вещи, которые нужно знать об окнах

Ниже приведен список того, что вы можете и чего не можете делать с окнами SFML.

Вы можете создавать множество окон

SFML позволяет создавать множество окон, а так же обрабатывать их события и управлять ими в главном потоке или в множестве потоков (но… смотрите ниже). В этом случае, не забудьте создать цикл обработки событий для каждого из них.

Пока что, множество мониторов не поддерживается

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

События окна должны быть обработаны в потоке окна

Это является серьезным сдерживающим фактором для большинства операционных систем: цикл обработки событий (точнее, функция pollEvent или waitEvent ) должен вызываться в том же потоке, в котором было создано окно. Это означает, что если вы хотите создать выделенный поток для обработки событий, вы должны убедиться, что окно создается в том же потоке. Если вы действительно хотите разделить задачи между потоками, удобнее обрабатывать события в главном потоке, и производить операции с окнами (например, отрисовку графики) в отдельном потоке. Эта конфигурация также будет совместима с других ограничений, описанными ниже.

На Mac OS X обслуживание окон и обработка событий должны производиться в главном потоке

Ага, это правда. Mac OS X не позволит вам создать окно или обработать события в потоке, отличном от главного.

На Windows окно, размером больше рабочего стола, не обрабатывается корректно

По какой-то причине, Windows не позволяет созвать окна, размером больше, чем рабочий стол. Это затрагивает окна, созданные с помощью VideoMode::getDesktopMode() : если вы будете использовать оформление окон (границы и заголовок), вы получите окно, которое будет немного больше, чем рабочий стол.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *