- (void)windowSetUp {
・・・一部引用のため途中は省略
vwrect.origin = NSZeroPoint;
/*
imageview = [[NSImageView alloc] initWithFrame:vwrect];
[imageview setImage:docImage];
[imageview setEditable:NO];
[imageview setImageScaling:YES];
[imageview setFrameSize: winrect.size];
[window setContentView:imageview];
[imageview release];
*/
NSTextField* textField = [[NSTextField alloc] initWithFrame:NSMakeRect(200,200, 100,20)];
[textField setSelectable:YES];
[textField setEditable:YES];
[textField setTarget:self];
[textField setAction:@selector(processAction:)];
[[window contentView] addSubview:textField];
[textField release];
> 正確には,「できない」ということが分かりました.
自分も興味があったので少し試してみましたが... もしかし
て普通に実行ファイルだけを作っていませんか?
ただの実行ファイルだけだと正しく GUI アプリとして認識さ
れないようです。認識されないとシステムが正しく初期化を行って
くれないようです。
以下、この前提でもう少し詳細を書きますが、
> 同じく機能させるためには,一般には公開されていないAPI
> を使えばできるかもしれませんが,
> それらは使うべきではないようです(バージョンアップ時に
> 変更になる可能性がある).
自分が理解した範囲では +[NSApplication sharedApplication]
中で主要な初期化がほぼ全て行われるようです。ただ、この時点で
特定の条件を満たしていないと GUI アプリとして必要な初期
化(ドックの表示、メニューの登録、イベント分配の初期化等)が
行われないようです。
逆にここで正しく初期化されれば、後は -[NSApplication run]
でいいようです。
その「特定の条件」が明確に分かったわけではないのですが、試し
てみたところ、少なくとも以下のどちらかの場合は、そこそこ動く
ようになる模様:
- パッケージ形式で実行ファイルが置かれている、すなわち
AppName.app/Contents/MacOS/AppName のような構造になっている
(荻原氏のサンプルコードもこれ)
- 実行ファイルのリソースフォークに plst リソースを付ける
(旧Mac OSのリソースフォークを持ったバイナリの形式。現
在は非推奨な形式だと思われる)
まあ普通は Xcode/IB/nib/パッケージ形式 でアプリを
作れば十分でしょうが、たまにはこの手のことを機会にウインドウ
システムの詳細を掘ってみるのも悪くない...かも?
Yanagisawa