Передний план против активного окна - PullRequest
38 голосов
/ 15 октября 2010

В Windows, в чем разница между передним планом и активным окном?Чтобы быть конкретным, при каких обстоятельствах окно переднего плана не может быть активным окном?Если 2 термина относятся к одному и тому же понятию, почему есть 2 термина.

В документации MSDN здесь упоминается "щелчок окна или использование ALT + TAB или ALT + ESC комбинация клавиш "делает окно активным, а также передним планом.Там нет ничего явно о разнице между этими двумя терминами. Проверьте MSDN .

Ответы [ 2 ]

52 голосов
/ 21 февраля 2015

Активное окно (результат GetActiveWindow()) - это окно , присоединенное к вызывающему потоку , который получает ввод.Окно переднего плана (результат GetForegroundWindow()) - это окно, которое в данный момент получает ввод независимо от его отношения к вызывающему потоку.Активное окно по существу локализовано для вашего приложения;окно переднего плана является глобальным для системы.

Например, если окно, принадлежащее другому процессу, является передним планом, вызов GetActiveWindow() из вашего собственного процесса вернет NULL.

Я считаю, что это правда, что быть окном переднего плана означает быть активным окном, но обратное неверно.Также обратите внимание, что в современных Windows приложения, как правило, не могут использовать SetForegroundWindow() для кражи фокуса из другого процесса (если только этот процесс явно не дал разрешение через AllowSetForegroundWindow).

11 голосов
/ 15 октября 2010

Я нахожу, что описание в MSDN также немного сбивает с толку, но вот мой пересмотренный подход:

Во-первых, переднее и фоновое окна не имеют ничего общего с активными окнами, это связано с потоками, см. Ниже,Таким образом, технически возможно иметь фоновое окно в качестве активного окна, однако это сбивает с толку, и система не делает этого за вас, вместо этого ваше приложение должно вызывать, например, SetWindowPos, чтобы сделать фоновое окно активным.

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

/----------------------\
|                      |
|   FOREGROUND WINDOW  |--\
|                      |  |
\----------------------/  |
  | BACKGROUND WINDOW     |
  \-----------------------/

/----------------------\
|                      |
|    ACTIVE WINDOW     |--\
|                      |  |
\----------------------/  |
  | BACKGROUND WINDOW     |
  \-----------------------/

Из MSDN

Активное окно

Активное окно - это окно верхнего уровня приложения, с которым в данный момент работает пользователь.Чтобы позволить пользователю легко идентифицировать активное окно, система помещает его в верхнюю часть z-порядка и меняет цвет строки заголовка и границы в соответствии с определенными системой цветами активного окна.Только окно верхнего уровня может быть активным окном.Когда пользователь работает с дочерним окном, система активирует родительское окно верхнего уровня, связанное с дочерним окном.

Передний план / Фон

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

...