Управление цветом: изменение профиля монитора изменилось для Windows?

Краткая версия:

Я ищу эквивалент Windows API уведомления Cocoa – windowDidChangeBackingProperties: в NSWindowDelegate, который вызывается, когда изменяется цветовое пространство Windows (когда его перемещают на другой монитор или когда профиль монитора изменяется пользователем).

Кто-нибудь знает, что эквивалентный API будет в Windows?

Длинная версия:

Я разрабатываю приложение, полностью управляемое цветом. Поэтому мне необходимо получать уведомления о том, когда изменяется цветной профиль мониторов или когда окно приложения перемещается на другой экран. На стороне Mac это просто, я просто реализую метод – windowDidChangeBackingProperties: для моего делегата Windows, и я получаю уведомления каждый раз, когда пользователь перетаскивает окно на другой монитор или когда изменен профиль глобального монитора. Простой и легкий. На стороне Windows я не знаю, как получить эти уведомления.

В настоящее время я получаю профиль монитора, используя GetICMProfile() WCS (Цветная система Windows), когда приложение запускается. Мне нужно уведомление, когда изменяется профиль монитора.

Как получать уведомления об изменении профиля монитора в Windows?

Бонусные баллы для уведомления о том, когда окно приложения перемещается с одного монитора на другой. Id надеюсь, что для этого существует уведомление, но если нет, я, вероятно, смогу его выяснить, если будет перемещаться окно мониторинга.

Ответ 1

Возможным решением является запрос цветового профиля с GetICMProfile() в некоторых специальных сообщениях (WM_SHOWWINDOW, WM_ACTIVATE и WM_EXITSIZEMOVE), а затем для сравнения, изменилось ли имя файла профиля (если имя файла изменилось, текущий профиль также изменился).

Это позор, но похоже, что HWND не получает сообщение, когда мы меняем цветовой профиль из параметров отображения, поэтому WM_ACTIVE частично решает эту проблему (когда окно нажато/активировано, мы можем проверить, если цвет профиль изменился).