ResEdit、ザ・スタート!


 すべてが予定通りにいくなんてことはなかった……。(←

 ResEditとリソースのことに全然触れないままなのはどうかと思い、ちょっとばかり書いてみます。


[注意]ResEditは軽くシステムを起動不能にしたりする力があるので、取り扱いには十分気をつけてください! リソースの勉強でシステムファイルなどを開く時は、コピーしてからコピーの方を開くようにします。


 「File」メニューから「New...」(名前は「〜.rsrc」がおすすめ)した直後の様子が左で、「Resource」メニューの「Create New Resource」で新しいリソースを追加していくと右のような感じになります。


 まずは、versリソースから解説ー。これはバージョンの情報です。とりあえず2つ作って、IDを1と2に変えます。

 内容は他のソフトなどを例にして……というか、どうするのが一番正しいマナーなのか、ぎるばーとも理解していません。

 あ、でも国名のところは14-Japanにしておきます。これを抜かすとOS Xで盛大に文字化け祭が開催されます……。


 Finderの「情報を見る」での見え方です。赤線の上(ID=2)と下(ID=1)の部分に注目!


 次はSTR#リソースに行きます。これにはユーザの目に入る文字列を入れます。IDは128からにするのが普通です。

 編集は、*****の部分をクリックして「Insert New Field(s)」したり、削除(Deleteキー)したり……。


 下は、STR#リソースの文字列をコード側で取り出す例。

Str255 text;
...
/*  indexは*****の左の数字  */
GetIndString(text, resID, index);

 次はMBARリソースとMENUリソースです。MBARリソースがメニューバーで、MENUリソースのIDを入れます。


 MENUリソースの方はとりあえずOS 9向けに作って、コードでOS Xに対応(「終了」を除去)するのが分かりやすいと思います。


 いろいろと端折りすぎ(←不親切)なコード例。

MenuBarHandle menuBar;
...
menuBar = GetNewMBar(128);
if (menuBar == NULL)
    ExitToShell();

SetMenuBar(menuBar);
/*  OS X向けの修正とか  */
/*  コマンドIDの設定とか  */
...
DrawMenuBar();

 次にWINDリソース。これはウインドウの外枠のデータです。ウインドウの種類とサイズ、クローズボックスやタイトルバーなどの設定ができます。「Initially visible」のチェックは外しておいた方がいいような……。


 ウインドウをWINDリソースから作る例です。

WindowRef window;
...
window = GetNewCWindow(128, NULL, kFirstWindowOfClass);
if (window == NULL)
    ExitToShell();

/*  標準ハンドラをインストール  */
InstallStandardEventHandler(GetWindowEventTarget(window));
...
ShowWindow(window);

 ダイアログは、以前にはDLOG/DITLリソースとModalDialog関数を使っていたのですが、Carbon Event Managerとの相性がいまいち……。なので、この講座ではCarbon Event Managerの関数を使う方法で行こうと思います。ちょっと先取りすると、ウインドウにCreateRootControlして、ShowWindowした後にRunAppModalLoopForWindow……という流れになります。


 さて、できあがったリソースファイルはどうしましょうか?(聞くなよ

 ……ちゃんと説明します。リソースファイルは、MPW Shellの「Create Build Commands...」でコードファイルと一緒に追加しておくと、ビルドの時にアプリケーションへとコピーされます。

 ちなみに、ぎるばーとによくあるミスで、ビルドしたアプリケーションのリソースを直接いじる→再ビルドで元通り→「What?(外人風」となるのがあります。こういうのはまねをしないように!


 リソースの種類はまだまだあるので、ハードディスクにあるソフトをResEditで開いて調べてみるといいかもしれません。BNDL/FREFリソースとアイコンの関係とか……。

 今回もお疲れ様でした! また次回、不思議の世界でお会いしましょう!(←?)終わりー。


前へ - 目次 - 次へ