Windows 10: GetSysColor () не получает темную тему пользовательского интерфейса - PullRequest
0 голосов
/ 30 августа 2018

В Windows 10 теперь доступна «темная тема».

В Tk GetSysColor () используется для получения системных цветов Windows, и WM_SYSCOLORCHANGE используется для отслеживания изменений цвета.

Когда выбрана высококонтрастная тема, Tk принимает изменения цвета.

Когда выбран dark-ui, Tk не видит изменения цвета, а перезапуск программы не улавливает изменения цвета.

Что-то особенное, что нужно сделать, чтобы получить эти цвета?

Edit:

Это соответствующие файлы в Tk:

Манифест: http://core.tcl.tk/tk/artifact/52574f6bb5c1c0d6

Код мониторинга: http://core.tcl.tk/tk/artifact/4629f358581eb7aa

Код инициализации / VS API: http://core.tcl.tk/tk/artifact/ab91ac197b786344

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Обычно переключатель Dark / Light-Theme предназначен только для «современных» приложений UWP. Вы можете проверить, что калькулятор, календарь и контакты меняют цвета, а классические приложения 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.

0 голосов
/ 30 августа 2018

Использование функций IsThemeActive и GetThemeColor / GetThemeSysColor .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...