Управление цветом: мониторинг профиля изменил уведомление для 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 частично решает эту проблему (когда окно щелкается / активируется, мы можем проверить, изменился ли цветовой профиль).

Другие вопросы по тегам