TL;DR:
WS_EX_APPWINDOW
和WS_EX_TOOLWINDOW
。示例:
从扩展样式中删除标志:
SetWindowLong(myHWND, GWL_EXSTYLE,
GetWindowLong(myHWND, GWL_EXSTYLE) & ~WS_EX_APPWINDOW & ~WS_EX_TOOLWINDOW);
设置所有者:
SetWindowLongPtr(myHWND, GWLP_HWNDPARENT, myOwnerHWND);
完整解释:
尽管Cody的解答很好,但它并没有完全回答这个确切的问题。
确切的问题是:“如何显示不出现在任务栏中的窗口,仅出现在一个虚拟桌面上?”
正如Cody所解释的那样,有几种方法可以删除窗口的任务栏按钮。然而,在它们中只有一种方法使其同时只在一个虚拟桌面上显示。
如果在扩展样式中包含标志WS_EX_APPWINDOW
,它将强制该窗口显示在任务栏上。这就是为什么在此情况下必须清除它的原因。
如果在扩展样式中包含标志WS_EX_TOOLWINDOW
,它将强制该窗口不显示在任务栏上,但将强制该窗口在所有虚拟桌面上显示。因此,在这里也不是一个选项。
最后,如果你的窗口既没有标志,又没有所有者,则只有在它没有所有者时才会出现在任务栏中。无论如何,它都不会强制出现在所有虚拟桌面上。因此,解决方案是既没有标志,又设置一个所有者。
WS_EX_APPWINDOW
扩展样式创建一个不属于任何人的窗口。要防止窗口按钮被放置在任务栏上,请使用 WS_EX_TOOLWINDOW
扩展样式创建不属于任何人的窗口。或者,您可以创建一个隐藏窗口,并将此隐藏窗口设置为可见窗口的所有者。WS_EX_APPWINDOW
扩展样式,那么它将会显示(当它可见时)。ITaskbarList::DeleteTab
是不必要的。为了确保窗口不出现在任务栏中,只需应用与决定窗口何时出现在任务栏中相反的规则即可。WS_EX_APPWINDOW
扩展窗口样式。如果您有一个拥有的窗口,则它将不会显示在任务栏中,除非设置WS_EX_APPWINDOW
扩展窗口样式以强制其显示在任务栏中。WS_EX_APPWINDOW
扩展窗口样式,那么应该将其删除。这会强制在任务栏中显示窗口。使用此样式创建的顶级窗口在用户单击它时不会成为前景窗口。当用户最小化或关闭前景窗口时,系统不会将此窗口带到前景。窗口不应通过编程访问或通过可访问技术(如Narrator)进行键盘导航来激活。要激活窗口,请使用SetActiveWindow或SetForegroundWindow函数。默认情况下,该窗口不会出现在任务栏上。要强制窗口出现在任务栏上,请使用WS_EX_APPWINDOW样式。