在不使用 WS_EX_TOOLWINDOW 的情况下从任务栏隐藏窗口

pau*_*aul 1 c winapi

我有一个主窗口和一个关于窗口,关于窗口是从主窗口打开的,但问题是关于窗口显示在任务栏中!

我发现为了从任务栏隐藏一个窗口,我可以使用WS_EX_TOOLWINDOW样式,但是我不希望关于窗口具有这种样式,那么还有其他方法吗?

Dav*_*nan 5

稍微简化一下,如果出现以下情况,任务栏中将显示一个窗口:

  • 它没有被拥有并且没有 WS_EX_TOOLWINDOW 扩展样式,或者
  • 它具有 WS_EX_APPWINDOW 扩展样式。

因此,您的解决方案是让窗口成为​​所有者。它应该归您的应用程序的主窗口所有。hWndParent在创建关于窗口时传递主窗口句柄。

hWndAbout := CreateWindowEx(..., hWndMainWindow, ...);
                                 ^^^ hWndParent
Run Code Online (Sandbox Code Playgroud)

除了解决任务栏的问题外,设置所有者还将确保关于窗口始终显示在主窗口的顶部。

  • 此外,父窗口不必是主窗口或任何可见窗口。如果您只是想让一个窗口隐藏在任务栏中,根据https://docs.microsoft.com/en-us/windows/win32/shell/taskbar#managing-taskbar-buttons,您可以先创建一个窗口而不显示它,并在创建新窗口时将其 HWND 作为父窗口传递。 (2认同)