简写:
我正在寻找相当于NSWindowDelegate
协议中的Cocoa – windowDidChangeBackingProperties:
通知的Windows API,当窗口的颜色空间发生变化时(当它移动到另一个监视器或当监视器配置文件由用户更改时)调用。
有人知道在Windows上等效的API是什么吗?
长版本:
我正在开发一个应用程序,是完全彩色管理。因此,当监视器的颜色配置文件更改或应用程序窗口移动到另一个屏幕时,我需要得到通知。在Mac端这很容易,我只是实现– windowDidChangeBackingProperties:
方法为我的窗口的委托,我会得到通知每当用户将窗口拖到另一个监视器或每当全局监视器配置文件被改变。简单的,一件容易的事。在Windows方面,我不知道如何获得这些通知。
目前,当应用程序启动时,我正在使用GetICMProfile()
WCS (Windows颜色系统)功能获取监视器配置文件。当监视器配置文件更改时,我需要一些通知。
如何在Windows上接收监视器配置文件更改通知?
应用程序窗口从一个监视器移动到另一个监视器时的通知加分项。我希望存在一个通知,但如果没有,我可能会通过监控窗口移动来找出它。
一种可能的解决方案是在某些特定消息(WM_SHOWWINDOW
, WM_ACTIVATE
和WM_EXITSIZEMOVE
)中使用GetICMProfile()
查询颜色配置文件,然后比较配置文件文件名是否已更改(如果文件名已更改,则当前配置文件也已更改)。
这是一个耻辱,但看起来HWND
没有收到消息,当我们改变显示设置的颜色配置文件,所以WM_ACTIVE
部分解决了这个问题(当窗口被点击/激活时,我们可以检查颜色配置文件是否已经改变)。