初めの一歩 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; }
以上まちがいなく入力したかを確認できたら、先ほどと同じようにアイコンをクリックしてください。

以下のようなウインドウが表示されたら成功です。

だめなときはビルドのときのエラーメッセージを良く読んで、入力ミス(?)を見つけてください。


目次に戻る