C++ 在Carbon应用程序中将焦点设置为Cocoa窗口

C++ 在Carbon应用程序中将焦点设置为Cocoa窗口,c++,objective-c,cocoa,macos-carbon,nswindow,C++,Objective C,Cocoa,Macos Carbon,Nswindow,我正试图在一个碳应用程序中创建一个Cocoa窗口(这是一个使用AGL的OpenGL API,无法更改,所以不要对此发表评论) 下面是一个代码片段: WindowRef winref = static_cast<eq::AGLWindow*>(getOSWindow())->getCarbonWindow(); vc = [[SFAttachedViewController alloc] initWithConfig:config]; //loads from view nib

我正试图在一个碳应用程序中创建一个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!
窗口显示,但从未给出焦点。我无法编辑任何控件,所有控件都显示为灰色

救命

我试过了

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

认为它可能是碳/可可的东西,但没有用。

在调用Cocoa方法之前,您是否调用了
NSApplicationLoad()
?是的,这就是为什么我在window init()方法中而不是在主线程中调用NSApplicationLoad()的原因。!?真不敢相信是这样。我将调用移动到主线程而不是渲染线程,瞧!工作德普:很好,它起作用了。通常,您不应该从非主线程调用任何Cocoa UI方法。不幸的是,Cocoa使用了很多只使用主线程的结构。e、 g.您不应该从次线程等调用
makekeyandrefront:
HIViewRef viewRef;
HICocoaViewCreate([vc view], 0, &viewRef);
WindowRef attachedRef = (WindowRef)[attachedWindow windowRef];
SetKeyboardFocus(attachedRef, viewRef, kControlNoPart);