【问题标题】:macOS: Problem moving child window with Parent windowmacOS:使用父窗口移动子窗口时出现问题
【发布时间】:2021-01-20 06:40:34
【问题描述】:

我在objective-c中编写了一个示例代码来绘制两个窗口并使第一个窗口成为第二个窗口的父窗口,这样当第一个窗口移动时,第二个窗口也会移动。我可以看到绘制了两个窗口,但是当我移动父窗口时子窗口没有移动。这段代码有什么问题?

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

【问题讨论】:

    标签: objective-c macos parent-child nswindow


    【解决方案1】:

    问题 1:

    setParentWindow 未执行。 CFRunLoopRun:

    以默认模式无限期运行当前线程的 CFRunLoop 对象。

    CFRunLoopRun之前设置父窗口。

    问题 2:

    来自parentWindow的文档:

    当该属性被子类的实现覆盖时,应从子类设置。否则不应设置。

    请改用addChildWindow:ordered:

    [window addChildWindow:window1 ordered:NSWindowAbove];
    

    【讨论】:

    • 试过了。仍然是相同的行为。
    • 它解决了这个问题。但我有一个问题......它也适用于现有的窗户吗?我想最终使我的应用程序成为 Google Chrome 的子应用程序。为此,我检索了 Google Chrome 和我的应用程序的 Window ID,并使用相同的 addChildWindow 函数对其进行了重新设置...但它现在不像上面的示例那样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多