获取托盘区时钟视觉主题的最佳方式是什么?

问题描述:

系统的托盘区时钟视觉主题是documented在MSDN中,所以我想微软希望我们能够使用它。我想用它来绘制我的任务栏乐队的背景,以便更好地融入托盘区域。当我尝试获取托盘区时钟视觉主题的最佳方式是什么?

OpenThemeData(NULL,L“CLOCK”);

总是失败。我发现,让这一主题的唯一方法,就是找到实际的时钟窗口,并要求其主题为:

  • 使用FindWindowEx找到一个窗口Shell_TrayWnd类,然后找到它的孩子TrayNotifyWnd类,那么这窗口的子女与TrayClockWClass类。

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

很明显,内部的Windows窗口类名是未记录的。尽管上面的方法似乎起作用,但我宁愿使用不太脆弱的东西。

问题:有没有任何理智的方法来获取托盘区的时钟视觉主题?

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

吉姆·巴里6年前

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

任何人都应该想出这件事是完全超越我。 视觉风格的文档是非常糟糕的绝对 耻辱。
- Jim Barry,MVP(Windows SDK)