4

系统的托盘区时钟视觉主题记录在 MSDN 中,所以我想微软希望我们能够使用它。我想用它来绘制我的任务栏带的背景,以便更好地与托盘区​​域融合。当我尝试

OpenThemeData (NULL, L"CLOCK");

总是失败。我发现获得该主题的唯一方法是找到实际的时钟窗口,并请求其主题:

  • 用于FindWindowEx定位一个带有Shell_TrayWnd类的窗口,然后用类定位它的子窗口,然后用类定位TrayNotifyWnd这个窗口的子窗口TrayClockWClass

  • 调用 OpenThemeData 并传递实际时钟的窗口句柄。

显然,内部 Windows 窗口类名称没有记录。尽管上面的方法似乎有效,但我宁愿使用不那么脆弱的东西。

问题:是否有任何合理的方法来获取托盘区域的时钟视觉主题?

4

1 回答 1

3

显然你不能总是使用带有 NULL 的 OpenThemeData
http://microsoft.public.platformsdk.shell.narkive.com/gkVTBGA2/cannot-open-theme-data-for-tray-notification-area

吉姆·巴里 6 年前

您需要有一个可以调用 SetWindowTheme 的 HWND。将 pszSubAppName 设置为“TrayNotifyHoriz”或“TrayNotifyVert”,并将 pszSubIdList 保留为 NULL。然后,您可以调用 OpenThemeData,并将 pszClassList 设置为“TrayNotify”。

任何人应该如何弄清楚这些东西完全超出了我的范围。坦率地说,视觉样式文档非常糟糕,绝对是一种耻辱。
-- Jim Barry,MVP(Windows SDK)

于 2013-09-13T12:44:10.760 回答