【问题标题】:Resizing an NSWindow setup as a childwindow将 NSWindow 设置调整为子窗口
【发布时间】:2013-04-01 22:54:24
【问题描述】:

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

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

老问题:

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

【问题讨论】:

    标签: xcode macos nswindow


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-01-28
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 2013-11-21
      • 2015-07-17
      相关资源
      最近更新 更多