【问题标题】:Cocoa Dock fires NSApplicationDidChangeScreenParametersNotificationCocoa Dock 触发 NSApplicationDidChangeScreenParametersNotification
【发布时间】:2011-10-26 11:13:04
【问题描述】:

当改变停靠位置时,Cocoa 会触发 NSApplicationDidChangeScreenParametersNotification:

问题是,对于Apple Docs,只有在

在连接到计算机的显示器的配置时发布 被改变。可以进行配置更改 以编程方式或当用户更改显示中的设置时 控制面板。通知对象是 sharedApplication。这 通知不包含 userInfo 字典。

因此,如果您想在附加新显示器时更新应用程序窗口(例如更改/移动某些 HUD 窗口/等的框架),您将收到一个虚假通知。 此通知也没有附加 userInfo 字典,因此我没有机会检查扩展坞或新显示控制器何时出现。

那么如何处理呢?

一个可能的解决方案是在通知 si 触发时检查 [NSScreen mainScreen] 大小。 如果此 NSSize 发生更改,则该通知来自附加的新显示器,而不是来自 Dock:

static NSSize mainScreenSize;

-(void)handleApplicationDidChangeScreenParameters:(NSNotification *)notification {


    NSSize screenSize = [[NSScreen mainScreen] frame].size;


    if( screenSize.width != mainScreenSize.width || screenSize.height != mainScreenSize.height ) { // screen size changed

        mainScreenSize =  [[NSScreen mainScreen] frame].size;
        [myWindowController updateContent];
        [[myWindow contentView] setNeedsDisplay:YES]; // update custom window

}

【问题讨论】:

    标签: cocoa dock nsapplication


    【解决方案1】:

    通知被触发是因为主屏幕的visibleFrame(不包括 Dock 占用的空间)取决于 Dock 的位置。

    所以如果主屏幕的visibleFrame发生变化,可以确定通知是Dock被移动的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 2014-07-18
      • 2011-01-30
      • 2014-05-10
      • 1970-01-01
      • 2017-02-07
      • 2010-09-28
      相关资源
      最近更新 更多