macOS:使用父 window 移动子 window 时出现问题
macOS: Problem moving child window with Parent window
我在 objective-c 中写了一个示例代码来绘制两个 windows 并使第一个 window 成为第二个 window 的父级,这样当第一个 window 移动,第二个 window 也移动。我可以看到绘制了两个 windows,但是当我移动父 window 时子 window 没有移动。这段代码有什么问题?
NSRect frame = NSMakeRect(0, 0, 200, 200);
NSUInteger styleMask = NSTitledWindowMask;
NSRect rect = [NSWindow contentRectForFrameRect:frame styleMask:styleMask];
NSWindow * window = [[NSWindow alloc] initWithContentRect:rect styleMask:styleMask backing: NSBackingStoreBuffered defer:false];
[window setBackgroundColor:[NSColor blueColor]];
[window makeKeyAndOrderFront:NSApp];
NSRect frame1 = NSMakeRect(0, 0, 100, 100);
NSUInteger styleMask1 = NSTitledWindowMask;
NSRect rect1 = [NSWindow contentRectForFrameRect:frame1 styleMask:styleMask1];
NSWindow * window1 = [[NSWindow alloc] initWithContentRect:rect1 styleMask:styleMask1 backing: NSBackingStoreBuffered defer:false];
[window1 setBackgroundColor:[NSColor greenColor]];
[window1 makeKeyAndOrderFront:NSApp];
CFRunLoopRun();
[window1 setParentWindow:window];
问题 1:
setParentWindow
未执行。 CFRunLoopRun
:
Runs the current thread’s CFRunLoop object in its default mode indefinitely.
在CFRunLoopRun
之前设置父window。
第 2 期:
来自 parentWindow
的文档:
This property should be set from a subclass when it is overridden by a subclass’s implementation. It should not be set otherwise.
改用addChildWindow:ordered:
。
[window addChildWindow:window1 ordered:NSWindowAbove];
我在 objective-c 中写了一个示例代码来绘制两个 windows 并使第一个 window 成为第二个 window 的父级,这样当第一个 window 移动,第二个 window 也移动。我可以看到绘制了两个 windows,但是当我移动父 window 时子 window 没有移动。这段代码有什么问题?
NSRect frame = NSMakeRect(0, 0, 200, 200);
NSUInteger styleMask = NSTitledWindowMask;
NSRect rect = [NSWindow contentRectForFrameRect:frame styleMask:styleMask];
NSWindow * window = [[NSWindow alloc] initWithContentRect:rect styleMask:styleMask backing: NSBackingStoreBuffered defer:false];
[window setBackgroundColor:[NSColor blueColor]];
[window makeKeyAndOrderFront:NSApp];
NSRect frame1 = NSMakeRect(0, 0, 100, 100);
NSUInteger styleMask1 = NSTitledWindowMask;
NSRect rect1 = [NSWindow contentRectForFrameRect:frame1 styleMask:styleMask1];
NSWindow * window1 = [[NSWindow alloc] initWithContentRect:rect1 styleMask:styleMask1 backing: NSBackingStoreBuffered defer:false];
[window1 setBackgroundColor:[NSColor greenColor]];
[window1 makeKeyAndOrderFront:NSApp];
CFRunLoopRun();
[window1 setParentWindow:window];
问题 1:
setParentWindow
未执行。 CFRunLoopRun
:
Runs the current thread’s CFRunLoop object in its default mode indefinitely.
在CFRunLoopRun
之前设置父window。
第 2 期:
来自 parentWindow
的文档:
This property should be set from a subclass when it is overridden by a subclass’s implementation. It should not be set otherwise.
改用addChildWindow:ordered:
。
[window addChildWindow:window1 ordered:NSWindowAbove];