Я нахожу, что описание в MSDN также немного сбивает с толку, но вот мой пересмотренный подход:
Во-первых, переднее и фоновое окна не имеют ничего общего с активными окнами, это связано с потоками, см. Ниже,Таким образом, технически возможно иметь фоновое окно в качестве активного окна, однако это сбивает с толку, и система не делает этого за вас, вместо этого ваше приложение должно вызывать, например, SetWindowPos, чтобы сделать фоновое окно активным.
Система может иметь только одно активное окно верхнего уровня, система активирует окно верхнего уровня, если вы работаете с дочерним окном.Все входные данные затем направляются в активное окно и затем обычно передаются в дочернее окно.
/----------------------\
| |
| FOREGROUND WINDOW |--\
| | |
\----------------------/ |
| BACKGROUND WINDOW |
\-----------------------/
/----------------------\
| |
| ACTIVE WINDOW |--\
| | |
\----------------------/ |
| BACKGROUND WINDOW |
\-----------------------/
Из MSDN
Активное окно
Активное окно - это окно верхнего уровня приложения, с которым в данный момент работает пользователь.Чтобы позволить пользователю легко идентифицировать активное окно, система помещает его в верхнюю часть z-порядка и меняет цвет строки заголовка и границы в соответствии с определенными системой цветами активного окна.Только окно верхнего уровня может быть активным окном.Когда пользователь работает с дочерним окном, система активирует родительское окно верхнего уровня, связанное с дочерним окном.
Передний план / Фон
Каждый процесс может иметьнесколько потоков выполнения, и каждый поток может создавать окна.Поток, создавший окно, с которым в данный момент работает пользователь, называется потоком переднего плана, а окно называется окном переднего плана.Все остальные потоки являются фоновыми потоками, а окна, созданные фоновыми потоками, называются фоновыми окнами.