窗口的Z次序表明了重叠窗口堆中窗口的位置,这个窗口堆是按一个假象的轴定位的,这个轴就是屏幕向外延伸的Z轴。Z次序最上面的窗口覆盖所有其他的窗口,Z次序最底层的窗口被所有其他的窗口覆盖。应用程序设置窗口在Z次序中的位置是通过把它放在一个给定窗口的后面,或是放在窗口堆的顶部或底部。
Windows系统管理三个独立的Z次序,一个用于顶层窗口,一个用于兄弟窗口,一个用于最顶层窗口。最顶层窗口覆盖所有其他非最顶层窗口,而不管它是不是活动窗口或者前台窗口。应用程序通过设置WS_EX_TOPMOST风格创建最顶层窗口。
一般情况下,Windows系统把刚刚创建的窗口放在Z次序的顶部,用于可通过激活另外一个窗口来改变Z次序;Windows系统总是把活动的窗口放在Z次序的顶部,应用程序可用函数BringWindowToTop把一个窗口放置到Z次序的顶部。函数SetWindowPos和DeferWindowPos用来重排Z次序。
上面提到了兄弟窗口、活动窗口、前台窗口、后台窗口等,那这些窗口又是指什么呢?
兄弟窗口指的是共享同一个父窗口的多个子窗口。
活动窗口是应用程序的顶层窗口,也就是当前使用的窗口。只有一个顶层窗口可以是活动窗口,如果用户使用的是一个子窗口,Windows就激活与这个子窗口相应的顶层窗口。
任何时候系统中只能有一个顶层窗口是活动的。用户通过单击窗口(或其中的一个子窗口)、使用ALT+TAB或ALT+ESC组合键来激活一个顶层窗口,应用程序则调用函数SetActiveWindow来激活一个顶层窗口。
在windows系统中,每个进程可以运行多个线程,每个线程都能创建窗口。创建正在使用窗口的线程称之为前台线程,这个窗口就称之为前台窗口。所有其他的线程都是后台线程,由后台线程所创建的窗口叫后台窗口。
用户通过单击一个窗口、使用ALT+TAB或ALT+ESC组合键来设置前台窗口,应用程序则用函数SetForegroundWindow设置前台窗口。
如果新的前台窗口是一个顶层窗口,那么Windows系统就激活它,换句话说,Windows激活相应的顶层窗口。