4

让我重新表述一下这个问题:

如何保持子 NSWindow(使用 NSWindow 添加到主 NSWindow addChildWindow)与主窗口的大小相同?

老问题:

我有两个NSWindow:一个 uiWindow 和一个 openglWindow。uiWindow 是无边界的,最初的大小与 openglWindow 相同。我将它添加为子窗口。我想让 uiWindow 跟随 openglWindow 经历的任何大小变化。为此,我订阅了 openglWindow 的委托,并且正在听该windowWillResize方法。然而,我现在很困惑。我不知道在 uiWindow 上调用哪个函数来调整它的大小。有很多选择:

  • setFrame: display: `
  • contentRectForFrameRect

  • frameRectForContentRect

下面是子窗口的初始化代码。

NSRect uiWindowRect = [self.openglWindow convertRectToScreen:((NSView*)self.openglWindow.contentView).bounds];
NSWindow* uiWindow = [[NSWindow alloc] initWithContentRect:uiWindowRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreNonretained defer:NO];

[self.openglWindow addChildWindow:uiWindow ordered:NSWindowAbove];
4

1 回答 1

3

我找到了一种完全符合我要求的方法。这是供参考的代码:

-(void)windowDidResize:(NSNotification *)notification{
    CGRect frame = CGRectMake(self.openglWindow.frame.origin.x,self.openglWindow.frame.origin.y, ((NSView*)self.openglWindow.contentView).frame.size.width, ((NSView*)self.openglWindow.contentView).frame.size.height);
    [self.window setFrame:frame display:YES];
    [self.window setFrameOrigin:NSMakePoint(self.openglWindow.frame.origin.x,self.openglWindow.frame.origin.y)];
    [self.window viewsNeedDisplay];
}
于 2013-04-04T01:06:23.180 回答