2017-02-20 83 views

回答

0

WS_EX_APPWINDOW样式是无主窗口在任务栏上显示时所必需的。

Extended Window Styles文档明确指出,“工具窗口未出现在任务栏”中。

MSDN进一步对此进行了更详细:

The Taskbar

壳牌放在任务栏上的按钮,每当应用程序创建一个无主窗口,也就是说,不具有父窗口并且具有适当的扩展样式位(参见下面的Managing Taskbar Buttons)。

...

管理任务栏按钮

每当应用程序创建未拥有的窗口的shell创建任务栏上的按钮。 要确保窗口按钮放置在任务栏上,请使用WS_EX_APPWINDOW扩展样式创建一个无主窗口。要防止将窗口按钮放置在任务栏上,请使用WS_EX_TOOLWINDOW扩展样式创建无主窗口。作为替代方案,您可以创建一个隐藏窗口,并将该隐藏窗口设置为可见窗口的所有者。

只有当窗口样式支持可见的任务栏按钮时,Shell才会从任务栏中删除窗口的按钮。如果要将窗口样式动态地更改为不支持可见任务栏按钮的样式,则必须先隐藏该窗口(通过调用ShowWindowSW_HIDE),更改窗口样式,然后显示该窗口。

...

修改的Shell32.dll中的任务栏

Version 4.71 and later的内容添加到修改任务栏的内容的能力。 从应用程序中,您现在可以添加,删除和激活任务栏按钮。激活该项目不会激活窗口;它显示在任务栏上按下的项目。

任务栏修改功能在一个组件对象模型(COM)对象(CLSID_TaskbarList)暴露该ITaskbarList接口(IID_ITaskbarList)来实现。您必须调用ITaskbarList::HrInit方法来初始化对象。然后可以使用ITaskbarList接口的方法修改任务栏的内容。

所以,你可能能够使用ITaskbarList::AddTab()为您的工具窗口:

任何类型的窗口可以被添加到任务栏,但建议该窗口至少有WS_CAPTION风格。

+0

好的,那么有没有办法使用WS_EX_TOOLWINDOW风格,但使用WS_EX_APPWINDOW来显示按钮? – Dementor

+0

@演员这两种风格不能混在一起。但是,您可以尝试使用'ITaskbarList :: AddTab()'。我更新了我的答案。 –