Jav*_*Man 39 winapi window foreground
在Windows中,前台窗口和活动窗口有什么区别?具体而言,前景窗口在什么情况下不能成为活动窗口?如果2个术语指的是相同的概念,为什么有2个术语.
这里的msdn文档提到"单击一个窗口,或者使用ALT+ TAB或ALT+ ESC组合键"使窗口处于活动状态和前景.没有明确说明2个术语之间的区别.检查MSDN.
jam*_*lin 52
活动窗口(结果GetActiveWindow())是附加到获取输入的调用线程的窗口.前景窗口(of of of of GetForegroundWindow())是当前获取输入的窗口,无论它与调用线程的关系如何.活动窗口基本上是本地化的应用程序; 前台窗口对系统是全局的.
例如,如果属于另一个进程的窗口是前台,GetActiveWindow()则将从您自己的进程内进行调用NULL.
我相信,前景窗口意味着成为活动窗口,但反之则不然.另请注意,在现代Windows中,应用程序通常不能用于SetForegroundWindow()从另一个进程窃取焦点(除非该进程已明确授予权限AllowSetForegroundWindow).
And*_*rsK 12
我发现MSDN中的描述有点令人困惑,但这是我修改过的内容:
首先,前景和后台窗口与活动窗口无关,它与线程有关,见下文.因此技术上可以将背景窗口作为活动窗口,但是它很混乱,系统不会为您执行此操作,而是您的应用程序需要调用例如SetWindowPos以使背景窗口处于活动状态.
系统一次只能有一个活动的顶级窗口,如果您正在使用子窗口,系统将激活顶级窗口.然后将所有输入定向到活动窗口,然后通常传递到子窗口.
/----------------------\
| |
| FOREGROUND WINDOW |--\
| | |
\----------------------/ |
| BACKGROUND WINDOW |
\-----------------------/
/----------------------\
| |
| ACTIVE WINDOW |--\
| | |
\----------------------/ |
| BACKGROUND WINDOW |
\-----------------------/
Run Code Online (Sandbox Code Playgroud)
来自MSDN
活动窗口
活动窗口是用户当前正在使用的应用程序的顶级窗口.为了使用户能够轻松识别活动窗口,系统将其置于z顺序的顶部,并将其标题栏和边框的颜色更改为系统定义的活动窗口颜色.只有顶级窗口才能成为活动窗口.当用户使用子窗口时,系统会激活与子窗口关联的顶级父窗口.
前景/背景
每个进程可以有多个执行线程,每个线程都可以创建窗口.创建用户当前工作的窗口的线程称为前台线程,窗口称为前台窗口.所有其他线程都是后台线程,后台线程创建的窗口称为后台窗口.