WS_EX_TOOLWINDOW导致的窗口一直不能在前面

435 阅读1分钟

在用CreateWindowEx创建窗口的时候,如果第一个参数赋值:WS_EX_TOOLWINDOW

CreateWindowEx(WS_EX_TOOLWINDOW,szWindowClass,"Title",WS_BORDER |WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE,500,500,500,500,NULL,NULL,hInstance,NULL);

则会发现该窗口会一直位于其它窗口的后边,即使把这个窗口前面的一个窗口关闭, 它会再跑到后面的一个窗口的后面,去掉这个属性就好了.

WS_EX_TOOLWINDOW,带有这个属性的窗口有以下特点:

  1. 不在任务栏显示。

  2. 不显示在Alt+Tab的切换列表中。

  3. 在任务管理器的窗口管理Tab中不显示。

我们可能会出于某种目的会为我们的窗口设置这个属性,但有一个副作用,就是这个窗口被拖动时,可以被拖动到任务栏里面去。

图片中,任务栏后面那个模糊的身影,就是我那悲催的窗口。

image.png

出现这个情况,如果程序再有窗口位置记忆功能,那窗口永远都拖不出来了(当然可以隐藏或者移动任务栏)。