Macintosh Programming (5) - モーダルダイアログ - 2000.July 7. モーダルダイアログ さて。ここでもう一つ、モーダルダイアログなアプリを作ってみます。直前の即習で ダイアログを作ったので、今度はそれが対象とお思いでしょうが、ちょっと待って 下さい。いや実はそっちをいきなり説明するのは思いの外困難なのでお茶を濁して いるってのが真相なのですが(^^;、それはともかく。 ところで。モーダルとかいう言葉の意味は何?という疑問があるはず。 モーダルと対になるのはモードレス。これはMacでもWinでも同じ。 #意味的にはモードがある、ない。です。unixでviはモードがあるので最低だ。 とかemacsな人に攻撃されるのに対し……。あ、いや。私はどっちかというとviな 人で…… ごほごほ。先ほどのAlert()も、一種のモーダルダイアログですね。あれが出ちゃうと [OK]か[Cancel]する以外、(他のアプリに切り替えることさえ)何もできなくなります。 つまり「俺様を先ずどーにかしないと他の作業は何もできないぞ」というモード、 というかそういう状態になるのがモーダル。ならないのがモードレス。ですね。 #他にもムーバブルダイアログとかあるようですが、本稿では無視 Macなプログラム(に、限らず)ではモーダルなダイアログって迷惑です。DOSじゃ あるまいし、他のプログラムに切り替えることすらできないってのは困りもの。 Appleのガイドラインを読んでみても、モーダルダイアログはできるだけ避ける べし。とか書いてあります。 しかし、現実はこのモーダルなダイアログが結構出ます。何故かというと、 モードレスなダイアログに比べて作るのが超簡単。なんですね。 だからだと思うのですが、アップルメニューの「About xxx...」で出るダイアログ とか、アプリの設定ダイアログってモーダルダイアログの場合が多い気がします。 (偏見かも) まともな(?)Macアプリを作る。という目標に至る前段階として、「About xxx...」な ダイアログというか、「このアプリに付いて...」ってのはあって当たり前な機能の ようですから、先ずそのダイアログを出すだけのものを作成するというのは悪い アイディアではないでしょう(と、思うが?)。 で、ResEditで適当にDLOGリソースを作ります(ALRTリソースじゃないですぞ!)。 DLOGメニューのAuto Positionで、Center On Main Screenを選ぶのが、それらしくて 吉かも(気分。というか表示だけの話なので、どうでも良いと言えばどうでも良いん ですけど)。 #余談ですが、ここで何も考えずに更にALRTリソースを作ると何が起こるか。 DITLリソース(ダイアログやアラートの中身)はダイアログとアラートで共通。 そしてResEditではダイアログのIDのデフォルトとアラートのIDのデフォルトは 一緒。128。つまり、見た目一緒なもんができることになります。 さて。起動するといきなりモーダルダイアログを出す。という、考えようによっては 最初に作った(「即習」で作ったSIOWな奴は除く)プログラムから全く進歩してない ものを作成している最中の画面のハードコピーは以下です。
この画像でアクティブなのはResEditですね。丁度DITL、ダイアログの中身を編集 しようとしている。という画像です。 で、お分かりのようにDITLとDLOGリソースのみしかありません。ソースもsmdlgと いうタイトルのウィンドウにある通りです。 smdlg.c ; ソース。未だ説明してません smpl.rsrc; リソース。ご覧の通り smpl.make; MPWでメニューからBuild->Create Build Commandをしてできたもの smdlg ; 実行ファイル。 で、ALRTと同様に考えて気楽にコンパイルして実行すると……。 何か変。Macってば。Macってば。Macってば。と、心の中で連呼しましたね。思わず。 #ソースもなしに何をどう同意すりゃ良いの?とか思うでしょうが、ここはこらえてね。 何が起こったかと言うと、[OK]ボタンの枠が太くなかったんです。ALRTリソースとして 呼び出した時は自動的に太くなったのに。。。 実は、DLOGの場合、デフォルトボタンの枠って自分で太く描かないとだめなんです。 (というかALRT以外の場合は全て自分で描くことになるようです) #うっ、ぎゃーっっっ。とか思うよね?ね?WindowsのSDKでのプログラムがとっても 親切に思える今日この頃(爆) @えと。「…けっ。便利なフレームワークが今はあるっちゅーに、それに背を向けて 自虐的にCで組んでいる化石野郎が何を言ってやがる。勝手に自爆でも何でもして おるが良い!」って思います? …いやまぁ。そー思わないでもないんですけどね。正直な所。でもここはそーゆーサイト だし、書いている奴はそーゆー人だってことです。以下次号。 (EOF)