【问题标题】:What is the best way to get tray area clock visual theme?获得托盘区时钟视觉主题的最佳方法是什么?
【发布时间】:2012-08-19 18:47:22
【问题描述】:

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

OpenThemeData(NULL, L"CLOCK");

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

  • 使用FindWindowEx 定位具有Shell_TrayWnd 类的窗口,然后定位其具有类TrayNotifyWnd 的子窗口,然后定位该窗口的具有TrayClockWClass 类的子窗口。

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

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

问题:有什么合理的方法可以获取托盘区域的时钟视觉主题吗?

【问题讨论】:

    标签: winapi themes system-tray


    【解决方案1】:

    显然你不能总是使用 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)

    【讨论】:

      猜你喜欢
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      相关资源
      最近更新 更多