让我重新解释一下这个问题:
如何让一个孩子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];
答案 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];
}