MSDN の説明も少しわかりにくいと思いますが、ここに私の改訂版を示します。
まず、フォアグラウンド ウィンドウとバックグラウンド ウィンドウは、アクティブなウィンドウとは関係ありません。スレッドと関係があります。以下を参照してください。したがって、バックグラウンド ウィンドウをアクティブ ウィンドウにすることは技術的に可能ですが、混乱を招き、システムはこれを行いません。代わりに、アプリで SetWindowPos などを呼び出してバックグラウンド ウィンドウをアクティブにする必要があります。
システムは、一度に 1 つのアクティブなトップレベル ウィンドウしか持つことができません。子ウィンドウで作業している場合、システムはトップレベル ウィンドウをアクティブにします。次に、すべての入力がアクティブ ウィンドウに送られ、通常は子ウィンドウに渡されます。
/----------------------\
| |
| FOREGROUND WINDOW |--\
| | |
\----------------------/ |
| BACKGROUND WINDOW |
\-----------------------/
/----------------------\
| |
| ACTIVE WINDOW |--\
| | |
\----------------------/ |
| BACKGROUND WINDOW |
\-----------------------/
MSDN から
アクティブ ウィンドウ
アクティブなウィンドウは、ユーザーが現在作業しているアプリケーションの最上位ウィンドウです。ユーザーがアクティブ ウィンドウを簡単に識別できるようにするために、システムはそれを z オーダーの一番上に配置し、タイトル バーと境界線の色をシステム定義のアクティブ ウィンドウの色に変更します。最上位のウィンドウのみがアクティブ ウィンドウになることができます。ユーザーが子ウィンドウで作業している場合、システムは子ウィンドウに関連付けられた最上位の親ウィンドウをアクティブにします。
前景/背景
各プロセスは複数の実行スレッドを持つことができ、各スレッドはウィンドウを作成できます。ユーザーが現在作業しているウィンドウを作成したスレッドはフォアグラウンド スレッドと呼ばれ、ウィンドウはフォアグラウンド ウィンドウと呼ばれます。他のすべてのスレッドはバックグラウンド スレッドであり、バックグラウンド スレッドによって作成されたウィンドウはバックグラウンド ウィンドウと呼ばれます。