【发布时间】:2021-12-18 01:53:35
【问题描述】:
CreateWindowEx中使用WS_EX_TOOLWINDOW标志时是否可以显示任务栏按钮?
【问题讨论】:
标签: winapi createwindowex
CreateWindowEx中使用WS_EX_TOOLWINDOW标志时是否可以显示任务栏按钮?
【问题讨论】:
标签: winapi createwindowex
无主的顶级窗口需要WS_EX_APPWINDOW 样式才能在任务栏上显示自身。
Extended Window Styles 文档明确指出“工具窗口不会出现在任务栏中”。
MSDN 进一步详细记录了这一点:
每当应用程序创建无主窗口时,Shell 就会在任务栏上放置一个按钮,即没有父窗口并且具有适当的扩展样式位的窗口(请参阅Managing Taskbar Buttons , 下面)。
...
管理任务栏按钮
每当应用程序创建一个不属于自己的窗口时,Shell 就会在任务栏上创建一个按钮。 为确保窗口按钮放置在任务栏上,请使用
WS_EX_APPWINDOW扩展样式创建一个无主窗口。要防止窗口按钮放置在任务栏上,请使用WS_EX_TOOLWINDOW扩展样式创建无主窗口。作为替代方案,您可以创建一个隐藏窗口,并让这个隐藏窗口成为您可见窗口的所有者。仅当窗口的样式支持可见的任务栏按钮时,Shell 才会从任务栏中删除窗口的按钮。如果您想动态地将窗口样式更改为不支持可见任务栏按钮的样式,则必须先隐藏该窗口(通过调用
ShowWindow和SW_HIDE),更改窗口样式,然后再显示该窗口。...
修改任务栏的内容
Shell32.dll 的Version 4.71 and later 增加了修改任务栏内容的能力。 您现在可以从应用程序中添加、删除和激活任务栏按钮。激活项目不会激活窗口;它在任务栏上显示该项目。
任务栏修改功能在组件对象模型 (COM) 对象 (
CLSID_TaskbarList) 中实现,该对象公开ITaskbarList接口 (IID_ITaskbarList)。您必须调用ITaskbarList::HrInit方法来初始化对象。然后就可以使用ITaskbarList接口的方法来修改任务栏的内容了。
因此,您也许可以将ITaskbarList::AddTab() 用于您的工具窗口:
任何类型的窗口都可以添加到任务栏,但建议窗口至少具有
WS_CAPTION样式。
【讨论】:
ITaskbarList::AddTab()。我更新了我的答案。