2010-11-05 3 views
2

Я разрабатываю плагин для FileMaker Pro 11 Advanced на Mac, используя его API-интерфейс плагина C++. Я хочу показать NSWindow на экране, который загружается через XIB-файл, но я не могу отобразить это окно, не устанавливая свойство «Visible at Launch» в окне YES в файле XIB.Как отображать окно в плагине, когда подключаемое приложение Cocoa предоставляет только C++ API?

Я пытаюсь:

[window makeKeyAndOrderFront:NSApp]; 

Проблема заключается в том, это не делает окно появится на экране. Я также попытался:

[window makeKeyAndOrderFront:windowController]; 

и:

[window makeKeyAndOrderFront:window]; 

и:

[window makeKeyAndOrderFront:nil]; 

Я новичок в Objective-C и какао, так что я все еще учусь базовые вещи о создании GUI на Mac. Однако я не уверен, что мой оконный контроллер, мое окно или даже NSApp «подключены к« FileMaker Pro »; то есть я не знаю, совпадает ли мой NSApp с файловым файлом NSApp. Это глупый вопрос?

Как NSWindowController успешно отображает окно на экране, если для параметра «Видимый при запуске» установлено значение «ДА»? Я не хочу продолжать использовать это свойство, чтобы получить окно на экране!

ответ

0

Итак, вы пытаетесь отобразить окно Cocoa из приложения Carbon. Вы звоните в NSApplicationLoad? См. CarbonCocoaIntegration.pdf на веб-сайте apple для получения более подробной информации.

0

Что такое «окно» в вашем примере? Я бы ожидать, что код, чтобы использовать либо

[windowController.window makeKeyAndOrderFront: nil] 

или

[self.window makeKeyAndOrderFront: nil]; 

(или NSApp вместо NIL или независимо от того, что отправитель не имеет значения здесь, он игнорируется, только приемник имеет значение) , NSWindowController лениво загружает свое окно, поэтому XIB не загружается, пока вы не вызовете -window. Вы не имеете прямого доступа к _window (или self -> _ window), переменной экземпляра, правильно? Потому что это будет только NIL до тех пор, пока вы первый раз не вызовете -window.

Кроме того, как уже упоминал Ян, FileMaker очень, очень старый и, скорее всего, еще не был обновлен, чтобы использовать Cocoa для своего пользовательского интерфейса. Вы можете смешивать Carbon (который FileMaker, вероятно, все еще написан) и Cocoa, но есть много мелких проблем и gotchas, поэтому я не рекомендую его, особенно когда вы новичок в Cocoa. Вам нужно будет изучить как Carbon, так и Cocoa, чтобы устранить многие вещи, которые вы делаете.

BTW - не использовать NSApp. Используйте [NSApplication sharedApplication], который позволит вам вернуть объект NSApplication. NSApp может быть NIL, если вы вызываете его раньше, чем кто-либо когда-либо вызывал [NSApplication sharedApplication]. И снова, как сказал Ян, для интеграции Carbon/Cocoa вам, возможно, придется вызвать функцию NSApplicationLoad(), чтобы Carbon знал, что теперь вы создадите в ней несколько окон Cocoa. Это все равно не поможет вам в строке меню, хотя это все равно будет Carbon.

Предоставляет ли FileMaker SDK условия для создания окон? Возможно, вам придется уйти в отставку, написав свой код против своего C++ SDK.В качестве альтернативы создайте автономное приложение Cocoa, которое создаст ваше окно и выполнит эту работу, и создайте крошечный плагин C++, который просто запускает это приложение, передает ему данные (например, записывая его в файл или отправляя AppleEvent на свой приложение или отправка информации с использованием распределенных объектов), а затем в какой-то момент знает, как извлечь данные из вашего приложения и передать его обратно в FileMaker.

 Смежные вопросы

  • Нет связанных вопросов^_^