初めの一歩 Hello World
Hello, world! と書かれたウインドウを表示するだけのアプリケーションを作ってみます。
Project Builder を立ち上げ、ファイルメニューから新規プロジェクトを選びます。
図のようなダイアログが表示されるので、Carbon Application (Nib Based) を選び「次へ」をクリックします。
プロジェクト名と保存場所を尋ねてきます。プロジェクト名は Hello World とし、保存場所はあらかじめ用意しておいた Projects フォルダの中に Hello World というフォルダを作って(これは設定をクリックすればできます)保存することにしました。最後に「完了」をクリックして次に進みます。
Hello World.pbproj という名前のウインドウが現れます。
左上の方にある Sources フォルダの三角をクリックすると、 main.c が小さな書類アイコンとともに表示されます。さらにこれを(シングルクリックして)選択すると、ウインドウの一番大きな部分に具体的な main.c のソースリストが表示されます。
実はこのままの状態で、アプリケーションの骨組みだけは完成状態にあります。これを確認するには、実際にビルド&実行してみるのが一番わかりやすいでしょう。そこで左から3番目にあるアイコンをクリックします。ソースコードのコンパイルが始まり、やがてライブラリにリンクされて「空」のアプリケーションが実行にうつされます。
(時には警告がでることもありますが、とりあえず気にしないことにします)
結果として、Window というタイトルの空白のウインドウが表示され、メニューバーには アプリケーション名の Hello World が表示されます。
これを停止するには、Hello World メニューからQuit Hello World を選びます。
それではいよいよ Hello World! とウインドウに表示する仕掛けを組み込んでみましょう。
Carbon Event Manager では、すべての event は共通のやり方で処理されます。今回のテーマの場合ウインドウの内容を描画するための event としてkEventClassWindow イベントクラスの kEventWindowDrawContent イベント種類に応答するコールバック関数(イベントハンドラー)を用意すればよいわけです。
main.c を開けて、次のコードを追加してください。
(1)#include <Carbon/Carbon.h>
行のすぐ後に関数のプロトタイプを追加します。
// function prototypes
pascal OSStatus MyWindowEventHandler( EventHandlerCallRef myHandler,
EventRef event, void* userData );
(2)main()
関数内で、OSStatus err;
の次に以下の宣言を追加します。
EventTypeSpec mainSpec = {kEventClassWindow, kEventWindowDrawContent};
(3)main()
関数内で、 DisposeNibReference(nibRef);
のすぐ後に、以下のコードを追加します。
// Install event handler
InstallWindowEventHandler( window, NewEventHandlerUPP(MyWindowEventHandler),
1, &mainSpec, (void *)window, NULL );
(4)main()
関数が終った後、ソースリストの最後尾に以下の関数を追加します。
pascal OSStatus MyWindowEventHandler( EventHandlerCallRef myHandler,
EventRef event, void* userData )
{
WindowRef window;
UInt32 eventKind;
OSStatus result = eventNotHandledErr;
GetEventParameter( event, kEventParamDirectObject, typeWindowRef, NULL,
sizeof(window), NULL, &window );
eventKind = GetEventKind( event );
if( eventKind == kEventWindowDrawContent )
{
SetPortWindowPort( window );
TextSize( 24 );
MoveTo( 20, 50 );
DrawString( "\pHello, world!");
result = noErr;
}
return result;
}
以上まちがいなく入力したかを確認できたら、先ほどと同じようにアイコンをクリックしてください。
以下のようなウインドウが表示されたら成功です。
だめなときはビルドのときのエラーメッセージを良く読んで、入力ミス(?)を見つけてください。
目次に戻る