2010-07-13 8 views
0

J'essaie de créer une fenêtre Cocoa dans une application Carbon (c'est une API OpenGL qui utilise AGL.) Impossible de la modifier.Définir le focus sur une fenêtre Cocoa dans Carbon App

Voici un snippit de code:

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! 

Et je tente de le montrer avec l'une des lignes suivantes:

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

Les spectacles de fenêtre, mais l'accent est jamais donné. Je ne peux pas éditer l'un des contrôles, et tout est grisé.

aide !?

J'ai essayé

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

Pensant qu'il aurait pu être une chose carbone/cacao, mais en vain.

+0

Avez-vous déjà regardé ce PDF? http://developer.apple.com/legacy/mac/library/documentation/Cocoa/Conceptual/CarbonCocoaDoc/CarbonCocoaIntegration.pdf – JeremyP

+0

Oui, c'est pourquoi j'ai eu l'appel NSApplicationLoad() dans ma fenêtre init() au lieu de dans le fil principal. –

Répondre

2

Avez-vous appelé NSApplicationLoad() avant d'appeler les méthodes Cocoa?

+0

Oui. A-t-il besoin d'être appelé dans chaque thread? –

+0

!? Je ne peux pas croire que c'était ça. J'ai déplacé l'appel au fil principal au lieu de mon fil de rendu et voilà! travail! DERP * facepalm * –

+0

Bien que cela a fonctionné. En général, vous ne devez appeler aucune méthode Cocoa UI à partir de threads non principaux. C'est malheureux, mais Cocoa utilise beaucoup de constructions principales. par exemple. Vous ne devriez pas appeler 'makeKeyAndOrderFront:' à partir des threads secondaires, etc. – Yuji

Questions connexes