Управление цветом: мониторинг профиля изменил уведомление для Windows?
Краткая версия:
Я ищу Windows API эквивалент Какао – windowDidChangeBackingProperties:
уведомление в NSWindowDelegate
протокол, который вызывается при изменении цветового пространства окна (когда оно перемещается на другой монитор или когда профиль монитора изменяется пользователем).
Кто-нибудь знает, какой эквивалентный API будет в Windows?
Длинная версия:
Я разрабатываю приложение, полностью управляемое цветом. Поэтому я должен быть уведомлен, когда цветовой профиль монитора изменяется или когда окно приложения перемещается на другой экран. На стороне Mac это легко, я просто реализую – windowDidChangeBackingProperties:
метод для делегата моего окна, и я буду получать уведомления всякий раз, когда пользователь перетаскивает окно на другой монитор или когда изменяется глобальный профиль монитора. Просто и легко. Что касается Windows, я не знаю, как получить эти уведомления.
В настоящее время я получаю профиль монитора, используя GetICMProfile()
Функция WCS ( Windows Color System) при запуске приложения. Мне нужно уведомление о том, когда профиль монитора меняется.
Как получить уведомления об изменении профиля монитора в Windows?
Бонусные баллы за уведомление о том, когда окно приложения перемещается с одного монитора на другой. Я надеюсь, что для этого есть уведомление, но если его нет, я, вероятно, смогу разобраться с помощью отслеживания перемещений окна.
0 ответов
Возможным решением является запрос цветового профиля с помощью GetICMProfile()
в некоторых конкретных сообщениях (WM_SHOWWINDOW
, WM_ACTIVATE
, а также WM_EXITSIZEMOVE
), а затем сравнить, изменилось ли имя файла профиля (если имя файла изменилось, текущий профиль тоже изменился).
Это позор, но похоже, что HWND
не появляется сообщение, когда мы меняем цветовой профиль в настройках дисплея, поэтому WM_ACTIVE
частично решает эту проблему (когда окно щелкается / активируется, мы можем проверить, изменился ли цветовой профиль).