2

C++ プラグイン API を使用して、Mac 上の FileMaker Pro 11 Advanced 用のプラグインを開発しています。XIB ファイルを介してロードされたオンスクリーンを表示したいのですがNSWindow、XIB ファイルでウィンドウの「Visible at Launch」プロパティを YES に設定しないとウィンドウを表示できません。

やっています:

[window makeKeyAndOrderFront:NSApp];

問題は、これによりウィンドウが画面に表示されないことです。私も試しました:

[window makeKeyAndOrderFront:windowController];

と:

[window makeKeyAndOrderFront:window];

と:

[window makeKeyAndOrderFront:nil];

私は Objective-C と Cocoa を初めて使用するので、Mac での GUI の作成に関する基本的なことをまだ学んでいます。ただし、ウィンドウ コントローラ、ウィンドウ、さらにNSAppは FileMaker Pro に「接続」されているかどうかはわかりません。NSAppつまり、私のファイルが FileMaker のファイルと同じかどうかわかりませんNSApp。これは愚かな質問ですか?

NSWindowController「起動時に表示」が「はい」に設定されている場合、画面にウィンドウを正常に表示するにはどうすればよいですか? ウィンドウを画面に表示するためだけに、そのプロパティを使い続けたくありません!

4

2 に答える 2

0

つまり、Carbon アプリケーションから Cocoa ウィンドウを表示しようとしています。最初に電話しましたNSApplicationLoadか?詳細については、Apple Web サイトのCarbonCocoaIntegration.pdfを参照してください。

于 2011-01-30T16:42:18.883 に答える
0

あなたの例の「ウィンドウ」とは何ですか? そのコードはどちらかを使用することを期待しています

[windowController.window makeKeyAndOrderFront: nil]

また

[self.window makeKeyAndOrderFront: nil];

(または、NIL などの代わりに NSApp を使用します。送信者はここ​​では関係ありません。無視されます。受信者のみが関係します)。NSWindowController はそのウィンドウを遅延ロードするため、-window を呼び出すまで XIB はロードされません。インスタンス変数である _window (または self->_window) に直接アクセスしているわけではありませんよね? これは、最初に -window を呼び出すまで NIL になるためです。

また、Jan がすでに言及したように、FileMaker は非常に古く、ユーザー インターフェイスに Cocoa を使用するようにまだ更新されていない可能性が非常に高いです。Carbon (FileMaker はおそらくまだ書かれている) と Cocoa を混在させることもできますが、小さな問題や落とし穴がたくさんあるので、特に Cocoa を初めて使用する場合はお勧めしません。多くのことをトラブルシューティングするには、Carbon と Cocoa の両方を学ばなければなりません。

ところで -- NSApp は使用しないでください。[NSApplication sharedApplication] を使用すると、NSApplication オブジェクトが確実に返されます。[NSApplication sharedApplication] が呼び出される前に NSApp を呼び出すと、NSApp は NIL になる可能性があります。また Jan が述べたように、Carbon/Cocoa 統合のために、関数 NSApplicationLoad() を呼び出す必要があるかもしれません。ただし、メニューバーは引き続き Carbon のままです。

FileMaker SDK は、ウィンドウを作成するための機能を提供していますか? その C++ SDK に対してコードを記述することをあきらめなければならない場合があります。または、ウィンドウを作成して作業を行うスタンドアロンの Cocoa アプリケーションを作成し、そのアプリケーションを起動してデータを渡す (たとえば、ファイルに書き込むか、AppleEvent をアプリケーションから情報を送信するか、分散オブジェクトを使用して情報を送信する)、ある時点で、アプリケーションからデータを取得して FileMaker に戻す方法がわかります。

于 2012-10-17T17:03:52.637 に答える