Macintosh Programming (3) - 最初のMacプログラム -	2000.July

5. 最初のMacなGUIプログラム
 さぁ。やっとここだ。以下はIM:Overviewの最初に載っているPascal ProgramのC版
です。こいつをそのままMPWで入力して動くことは確認済み。
 あ。こいつはSIOWではなくてApplicationを選んでね。

 #注意:以下のソースには目一杯、日本語なコメントを付けてますが、実際のMPWは
  日本語を表示できません。MPWで日本語を表示させることも可能かもしれませんが、
  私は追求してません。

  私個人は、公私に渡りソースに日本語なコメントを書くことはほとんどないです。
  (このページみたいに純然たる説明のためで無ければ、ということ)

  何故かと言うと、日本語が使えるような環境って私には超特殊。という過去が
  あったし、日本語なぞを使おうものならトラブルよ、こんにちわ。という現実が
  厳然とあったんで、それがトラウマになっているようです(^^;;

---
/*
    Simple but modal dialog
*/

#include <Windows.h>    // 何となく不安だけど、コンパイルはこれだけで通りますです
QDGlobals qd;           // Quick DrawのGlobalの宣言。必須のようです 

int main()  // int main(void)の方がより良いかも
{
    WindowPtr gWin;
    Str255 gStr = "\pHello, MAC world!";    // Pascal定数文字列の定義
    Rect gRc;

    InitGraf(&qd.thePort);          // 以下、各種マネージャ群の初期化
    InitFonts();
    InitWindows();
    InitCursor(); 

    SetRect(&gRc, 100, 100, 400, 200);  // Rectへの代入。ウィンドウサイズを指定している 

    // ウィンドウの作成。引数の意味は気にしないのが吉
    gWin = NewWindow(nil, &gRc, "\p ", true, dBoxProc, (WindowPtr) -1, false, 0);
    SetPort(gWin); // 描画APIがどのウィンドウを対象にするかを指定する
    /*do{*/
    // Window中央に文字表示開始位置を設定
    MoveTo((gWin->portRect.right - gWin->portRect.left) / 2 -
        StringWidth(gStr) / 2, (gWin->portRect.bottom - gWin->portRect.top) / 2);
    TextFont(systemFont);        // フォントを指定……
    DrawString(gStr);
    /*}*/ while (!Button());     // マウスのボタンが押されるまでループ 

    return 0;   // ANSI Cではvoid main()というのは規格違反なので、とりあえず0を返す
}
#ちなみにMPWの色使いってマジでこんな感じ。目に余り優しくない……(*_*;
 実行すると、「Hello, MAC world!」と表示されるウィンドウが表示され、マウスボタンを
 押すと終了する。ということになるはずです。

 #ここで実は良く分からないのがWindowPtr。そもそもHogePtrってのはポインタ。HogeRefは
  HogePtrへのポインタ(つまりポインタのポインタとなる)。というのがMacでのお約束のはず。
  つまり明白に異なる型。
  しかし、見る資料によって同じAPIの引数がWindowPtrだったりWindowRefだったりするのは
  何故?ごっちゃに使っても平気で何故か動くし?
  普通、**fooと*fooを間違えると即刻クラッシュすると思うのだが……(コンパイルができる
  というのも謎。幾らCでも、その程度の型チェックはしてると思うのだが[?])。

  元々、..Ptrってのはポインタ。ガベッジコレクションでは動かせない、Mac OSから見たら
  迷惑千万なメモリブロック。一方、..Refというのはポインタのポインタ。Ptrより4バイト程
  余計に管理領域が必要だけど、ガベッジコレクションで再配置可能な分、Mac OSから見て
  ありがたいメモリブロック。の、はずなんだが……。

 #というぐらいレベルの低いあたしがお送りしております、Macプログラマ日記です(爆)

 PS. OS 8/9なApple社のサイトにあるAPIのアルファベット順一覧を見る限り、WindowPtrが正しい模様

(EOF)