2

我已经看过关于如何将窗口移动到不同的 NSScreen 的帖子,但这并不是我想要的(而且我不确定在任何情况下答案是否是正确的方法)。

当我调用 makeKeyAndOrderFront 时,我希望窗口与菜单栏一起显示在屏幕上 - 因为它是一个关于窗口,这意味着用户必须选择关于菜单项(该窗口不是用户可移动的)并且指针是正确的那里。当然,默认行为是让窗口显示在具有关键焦点的屏幕上。

现在,我可以根据 [[NSScreen screen] objectAtIndex:0] 计算它的框架矩形,这显然是带有菜单栏的窗口。但是 1)这似乎是一个非常简单的 hack 并且 2)不确定这是否适用于菜单栏将四处移动的 Mavericks。

我错过了一些基本的东西吗?因为它确实看起来像。

4

3 回答 3

1

由于您确定窗口将由鼠标 aciton 创建,因此您可以找到包含鼠标指针的屏幕,而不是寻找菜单栏:

NSScreen * mouseScreen = nil;
NSPoint mousePoint = [NSEvent mouseLocation];
for( NSScreen * screen in [NSScreen screens] ){
    if( NSMouseInRect(mousePoint, [screen frame], NO) ){
        mouseScreen = screen;
        break;
    }
}
于 2013-07-26T18:54:47.877 回答
0

我决定采用另一种方式,但我确实发现,如果您将窗口设为 NSPanel 而不是 NSWindow,它似乎会进入主屏幕(带有菜单栏)。然而,不确定它会对小牛队做什么。

于 2013-07-31T15:03:59.140 回答
0

您可以NSWindow将其框架子类化并将其约束到主屏幕。

- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen {
    return [super constrainFrameRect:frameRect toScreen:[NSScreen mainScreen]];
}

[NSScreen mainScreen]不是指计算机主屏幕,而是包含当前接收键盘事件的窗口的屏幕。

请注意,如果打开然后重新打开,窗口不会移动到其他屏幕。

于 2019-01-10T15:21:54.033 回答