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

时间:2012-08-19 18:47:22

标签: winapi themes system-tray

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

  

OpenThemeData(NULL,L“CLOCK”);

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

  • 使用FindWindowEx找到一个Shell_TrayWnd类的窗口,然后找到类TrayNotifyWnd的子窗口,然后找到该窗口的TrayClockWClass类的子窗口。

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

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

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

1 个答案:

答案 0 :(得分:3)

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

  

Jim Barry 6年前

     

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

     

任何人应该如何计算出这些东西是完全超出我的。   视觉风格文档坦率地说是非常糟糕的,绝对的   耻辱。
   - Jim Barry,MVP(Windows SDK)