dfu*_*chs 5 winapi windows-themes windows-10
正如 yolu 可能已经注意到的,微软在 Windows 10 中引入了一种现代的“主题”,涉及基本的操作系统元素,如开始菜单和任务栏。在较新的版本中,您可以选择“浅色”主题作为默认黑色主题的替代方案。
我想知道是否有一个 API 或钩子可以优雅地(更重要的是)有效地检查实时主题更改(在 MS 文档中没有找到任何与此相关的内容,但恕我直言,这些宝石通常都隐藏在那里)。
具体问题:当您的桌面应用程序带有系统托盘图标时,您很可能将其设计为明亮的。几乎所有现代 Windows 图标都具有这种风格(简单且白色,在黑色任务栏上具有良好的可读性)。现在,您可以为浅色主题提供较暗风格的不同版本,但如何注意何时动态应用此版本?
我知道 HCU(Software/Microsoft/Windows/CurrentVersion/Themes/Personalize)下的注册表项,这就是我现在正在使用的。然而,盲目地每 x 毫秒检查一次变化似乎相当尴尬。
如果没有这样的东西可用,我也很高兴听到一些更有效地实施此类检查的想法。
方法1\xef\xbc\x9a 使用RegNotifyChangeKeyValue
\n\n\n\n\n通知调用者有关指定注册表项的属性或内容的更改。\n
\n
方法2:使用WM_SETTINGCHANGE
\n\n\n\n\n当应用程序更改系统参数时,应将 WM_SETTINGCHANGE 发送到所有顶级窗口。(此消息不能直接发送到窗口。)要将 WM_SETTINGCHANGE 消息发送到所有顶级窗口,请使用 SendMessageTimeout 函数,并将 hwnd 参数设置为 HWND_BROADCAST。
\n
我倾向于使用第二种方法,我已经尝试过,并且已经能够成功工作。
\n\n最小代码示例\xef\xbc\x9a
\n\ncase WM_SETTINGCHANGE:\n {\n if (!lstrcmp(LPCTSTR(lParam), L"ImmersiveColorSet"))\n {\n //theme has been changed\n }\n }\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1119 次 |
| 最近记录: |