我正在开发一个 OS X 应用程序,该应用程序在所有连接的显示器的所有可用空间上显示自定义窗口。
我可以通过调用 [NSScreen Screens] 获取可用显示对象的数组。
我目前缺少的是一种判断用户是否将显示器连接到系统或从系统断开屏幕的方法。
我在 Cocoa 文档中搜索了处理此类情况的通知,但运气不佳,而且我不相信在更改连接到系统的显示器数量时不会发布某种系统通知。
关于如何解决这个问题有什么建议吗?
有几种方法可以实现这一目标:
你可以实施applicationDidChangeScreen参数: http://developer.apple.com/library/mac/documentation/cocoa/reference/NSApplicationDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/NSApplicationDelegate/applicationDidChangeScreenParameters:在您的应用程序委托中(该方法是NSApplicationDelegateProtocol
).
另一种方法是聆听NSApplicationDidChangeScreenParametersNotification
默认通知中心发送[NSNotificationCenter defaultCenter]
.
每当您的委托方法被调用或您收到通知时,您都可以迭代[NSScreen screens]
并查看显示器是否已连接或删除(您必须维护一个显示器列表,可以在程序启动时检查)。
非 Cocoa 方法是通过 Core Graphics Display 服务:
您必须实现重新配置功能并将其注册到CGDisplayRegisterReconfigurationCallback(CGDisplayReconfigurationCallBack cb, void* obj); https://developer.apple.com/library/mac/documentation/graphicsimaging/reference/Quartz_Services_Ref/Reference/reference.html#//apple_ref/c/func/CGDisplayRegisterReconfigurationCallback
在重新配置功能中,您可以查询受影响显示器的状态。例如。:
void DisplayReconfigurationCallBack(CGDirectDisplayID display, CGDisplayChangeSummaryFlags flags, void* userInfo)
{
if(display == someDisplayYouAreInterestedIn)
{
if(flags & kCGDisplaySetModeFlag)
{
...
}
if(flags & kCGDisplayRemoveFlag)
{
...
}
if(flags & kCGDisplayDisabledFlag)
{
...
}
}
if(flags & kCGDisplaySetModeFlag || flags & kCGDisplayDisabledFlag || flags & kCGDisplayRemoveFlag)
{
...
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)