winapi - 获得托盘区域时钟视觉主题的最佳方式是什么?

标签 winapi themes system-tray

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

OpenThemeData(NULL, L"CLOCK");

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

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

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

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

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

最佳答案

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

Jim Barry 6 years ago

You need to have an HWND that you can call SetWindowTheme for. Set pszSubAppName to "TrayNotifyHoriz" or "TrayNotifyVert" and leave pszSubIdList as NULL. You can then call OpenThemeData with pszClassList set to "TrayNotify".

How anyone is supposed to figure this stuff out is totally beyond me. The visual styles documentation is quite frankly abysmal, an absolute disgrace.
-- Jim Barry, MVP (Windows SDK)

关于winapi - 获得托盘区域时钟视觉主题的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12029043/

相关文章:

.net - 如何以编程方式关闭 BalloonTip?

css - 如何删除 wordpress divi 主题部分之间的空格

python - Qt QSystemTrayIcon 更改菜单项

delphi - 如何以编程方式选择另一个应用程序中的上下文菜单项?

c - 掌握Windows 10的声音管理

c++ - 从模拟用户下启动的某些系统默认 .lnk 文件的问题

不能包含这两个文件(WinSock2、Windows.h)

android - 如何在自定义主题中引用样式

android - 如何为按钮选择器设置不同的主题?