winapi - Windows 10:GetSysColor() 没有获得深色 ui 颜色主题
问题描述
在 Windows 10 上,“深色主题”现在可用。
在 Tk 中,GetSysColor() 用于获取 windows 系统颜色,WM_SYSCOLORCHANGE 用于跟踪颜色变化。
When a high contrast theme is selected, Tk picks up the color changes.
选择dark-ui时,Tk看不到颜色变化,重启程序也不会拾取颜色变化。
是否需要做一些特别的事情才能获得这些颜色?
编辑:
这些是 Tk 中的相关文件:
清单:http ://core.tcl.tk/tk/artifact/52574f6bb5c1c0d6
监控代码:http ://core.tcl.tk/tk/artifact/4629f358581eb7aa
初始化/VS API 代码:http ://core.tcl.tk/tk/artifact/ab91ac197b786344
解决方案
更新:微软在较新版本的 Windows 10 中改进了深色主题处理,所以在某些时候这个答案会过时。
通常深色/浅色主题开关仅适用于“现代”UWP 应用程序。您可以验证 Calculator、Calendar 和 Contacts 会切换颜色,但经典应用 Explorer、Notepad 和 Paint 不会。
我不确定您是否要将 Tk 移植到 UWP,因为您似乎没有朝这个方向做任何步骤。在经典应用程序的情况下,暗模式是有问题的,因为基本的 Windows 控件(按钮、标签、编辑字段)不支持它。
如果您真的想更改某些内容以响应经典应用程序中的 Light/Dark 设置开关,请DWORD
从HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize\AppsUseLightTheme
bool IsDarkThemeActive()
{
DWORD type;
DWORD value;
DWORD count = 4;
LSTATUS st = RegGetValue(
HKEY_CURRENT_USER,
TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"),
TEXT("AppsUseLightTheme"),
RRF_RT_REG_DWORD,
&type,
&value,
&count );
if ( st == ERROR_SUCCESS && type == REG_DWORD )
return value == 0;
return false;
}
当更改亮/暗设置时,顶级窗口会收到WM_SETTINGCHANGE
消息。
推荐阅读
- cakephp - PhpStorm 2019.3 读取 CakePhp 翻译为 SQL 命令
- azure-cosmosdb - 更新文档时 ttl 是否刷新?
- java - Java spring boot 更新实体导致超时和错误实体
- search - 安装记录管理后,Alfresco solr/search 停止工作
- css - CSS Grid:在特定 x 位置开始列
- python - 列表理解甚至列表元素而不是循环以及如何仅引用索引
- php - 选择所有帖子及其类别和标签以显示在主页中
- reactjs - 将反应组件加载到与包含其链接的 div 不同的 div 中
- ruby-on-rails - 使用 RAILS_ENV="production" bundle exec rails c 时分配内存失败 (NoMemoryError)
- mongodb - solr 连接到 Mongo 时在控制台中出现以下错误。solr 日志中没有错误