Windows 10:GetSysColor()没有得到黑暗的ui颜色主题

问题描述 投票:3回答:2

在Windows 10上,“黑暗主题”现在可用。

在Tk中,GetSysColor()用于获取Windows系统颜色,WM_SYSCOLORCHANGE用于跟踪颜色变化。

选择高对比度主题时,Tk会选择颜色变化。

当选择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

winapi colors
2个回答
0
投票

通常,Dark / Light-Theme开关仅适用于“现代”UWP应用程序。您可以验证计算器,日历和通讯录切换颜色,但经典应用程序资源管理器,记事本和绘图不会。

我不确定你是否想将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;
}

当Light / Dark设置更改时,顶级窗口会获得WM_SETTINGCHANGE消息。


1
投票
© www.soinside.com 2019 - 2024. All rights reserved.