将NSWindow设置调整为子窗口

时间:2013-04-01 22:54:24

标签: xcode macos nswindow

让我重新解释一下这个问题:

如何让一个孩子NSWindow(使用addChildWindow添加到主NSWindow)与主窗口大小相同?

旧问题:

我有两个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];

1 个答案:

答案 0 :(得分:2)

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

-(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];
}