gpt4 book ai didi

Cocoa Dock 触发 NSApplicationDidChangeScreenParametersNotification

转载 作者:行者123 更新时间:2023-12-03 16:55:18 25 4
gpt4 key购买 nike

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

问题在于Apple Docs ,仅在以下情况下才应引发

Posted when the configuration of the displays attached to the computer is changed. The configuration change can be made either programmatically or when the user changes settings in the Displays control panel. The notification object is sharedApplication. This notification does not contain a userInfo dictionary.

因此,如果您想在连接新显示器时更新应用程序窗口(例如更改/移动某些 HUD 窗口的框架等),您将在扩展坞中收到一条虚假通知。此外,此通知没有附加 userInfo 字典,因此我没有机会检查扩展坞或新的显示 Controller 是否已存在。

那么如何处理呢?

一个可能的解决方案是在通知 si 触发时检查 [NSScreen mainScreen] 大小。如果此 NSSize 发生变化,则该通知来自连接的新显示器,而不是来自扩展坞:

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

}

最佳答案

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

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

关于Cocoa Dock 触发 NSApplicationDidChangeScreenParametersNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7901826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com