【问题标题】:Set Focus to a Cocoa Window in Carbon App在 Carbon App 中将焦点设置到 Cocoa 窗口
【发布时间】:2010-07-13 12:40:38
【问题描述】:

我正在尝试在其他 Carbon 应用程序中创建一个 Cocoa 窗口(它是一个使用 AGL 的 OpenGL API。无法更改它所以不要对此发表评论)。

这是一个代码片段:

WindowRef winref = static_cast<eq::AGLWindow*>(getOSWindow())->getCarbonWindow();
vc = [[SFAttachedViewController alloc] initWithConfig:config]; //loads from view nib
NSPoint buttonPoint = NSMakePoint(event.pointerButtonPress.x + [cocoaWrap frame].origin.x, [cocoaWrap frame].size.height - event.pointerButtonPress.y + [cocoaWrap frame].origin.y);
MAAttachedWindow *attachedWindow = [[MAAttachedWindow alloc] initWithView:[vc view] attachedToPoint:buttonPoint onSide:side atDistance:0.0f]; // some Matt Gemmell goodness!

我尝试用以下几行之一来展示它:

// A)
[NSApp runModalForWindow:[attachedWindow retain]]; // makes a white box
// B)
NSWindow *cocoaWrap = [[NSWindow alloc] initWithWindowRef:winref];
[cocoaWrap addChildWindow:attachedWindow ordered:NSWindowAbove];
// C)
[attachedWindow makeKeyAndOrderFront:NSApp];

窗口显示,但从未给出焦点。我无法编辑任何控件,并且所有控件都显示为灰色。

求助!?

我试过了

HIViewRef viewRef;
HICocoaViewCreate([vc view], 0, &viewRef);
WindowRef attachedRef = (WindowRef)[attachedWindow windowRef];
SetKeyboardFocus(attachedRef, viewRef, kControlNoPart);

认为它可能是碳/可可的东西,但无济于事。

【问题讨论】:

标签: c++ objective-c cocoa macos-carbon nswindow


【解决方案1】:

在调用 Cocoa 方法之前你是否调用了NSApplicationLoad()

【讨论】:

  • !?我不敢相信就是这样。我将调用移动到主线程而不是我的渲染线程,瞧!在职的! DERP facepalm
  • 很好用。一般来说,您不应该从非主线程调用任何 Cocoa UI 方法。不幸的是,Cocoa 使用了很多仅主线程的构造。例如您不应该从辅助线程等调用makeKeyAndOrderFront:
猜你喜欢
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 2012-09-07
  • 2014-06-20
相关资源
最近更新 更多