NSScreen visibleFrame仅考虑主屏幕上的菜单栏区域

时间:2015-04-29 20:13:58

标签: macos cocoa multiple-monitors

我注意到NSScreen的visibleFrame方法并没有减去非主屏幕上的菜单栏尺寸。说我有以下代码:

DB("Cocoa NSScreen rects:");
NSArray *screens = [NSScreen screens];
for(NSUInteger i = 0; i < [screens count]; ++i) {
    NSScreen *screen = [screens objectAtIndex:i];
    CGRect r = [screen visibleFrame];

    const char *suffix = "";
    if(screen == [NSScreen mainScreen])
        suffix = " (main screen)";

    DB("    %lu. (%.2f, %.2f) + (%.2f x %.2f)%s", (unsigned long)i, r.origin.x, r.origin.y, r.size.width, r.size.height, suffix);
}

我在Mac上运行它,每台显示器上都有一个菜单栏。然后我得到以下输出:

Cocoa NSScreen rects:
    0. (4.00, 0.00) + (1276.00 x 777.00) (main screen)
    1. (3200.00, 9.00) + (1200.00 x 1920.00)
    2. (1280.00, 800.00) + (1920.00 x 1200.00)

菜单栏和(隐藏)底座的大小似乎已从主屏幕的可见区域中正确减去 - 但外部显示器上的菜单栏尚未计算在内! (假设菜单栏在每个屏幕上都是23像素高 - 所以我希望屏幕1类似1200x1897,屏幕2大约是1920x1877。)

除了想知道屏幕有多大 - 在那里你只需要相信我,我很害怕! - 我究竟做错了什么?如何获得准确的屏幕界限?

(OS X约塞米蒂10.10.3)

0 个答案:

没有答案