■ 新・ゲーム開発講座




■ へっぽこプログラミング入門♪


■第39夜:小窓を開いて文字入力@

今回は、ユーザーによるテキストの入力を実装します。具体的には、ADVやノベルにおいて
キャラクターの名前の直接入力をする機能を追加します(結構リクエストが多かったんですよね…これ ^0^;)。かな漢字変換等の対応を考えると、自力で窓を描画してキーセンスをするよりも素直にダイアログを開いたほうが楽そうですので、易きに流れ安直に参りましょう。外観としては↓こんなカンジになります。ソースはこちらです。





またスクリプトコマンドとしては、以下のような書式でよいでしょう。

#text_input 変数名

変数名:いまのところは STR * を指定(* は数値 0〜16)



■もうひとつの窓

さて、今回の主要なテーマはダイアログBOX(モーダルダイアログ)の作成です。モーダルとは、モード切替をともなうという意味で、今回の例ではたとえばゲームのキャラクタの名前を入力し終わってダイアログを閉じるまで、ダイアログを呼び出した本体側のウィンドウは動作を停止して 「待ち」 状態になります。ダイアログを開いた状態でも親ウィンドウの動作が止まらないモードレスダイアログというのもありますが、ここでは割愛します。

ダイアログBOXは見た目は小さな窓ですが、実は 第2夜〜第3夜 で解説したスケルトンと似たようなイベントハンドラでメッセージを処理しながら動作します。イベントハンドラはダイアログBOXをひとつ開く毎に1つ用意してやる必要がありますが、基本的な処理はコントロール(ダイアログBOXに貼り付ける部品のようなものと思ってください)に任せて結果を受け取る…という形でよいので、実装はそれほど難しいものではありません。また、ダイアログBOXのデザインやコントロールの配置は、VC++付属のリソースエディタで簡単に行うことが出来ます。

■とりあえずダイアログをデザインしてみよう

まあ前置きはこのくらいにして、とりあえずダイアログBOXをデザインしてみましょう。ダイアログBOXはリソーススクリプトで定義します。ファイル名は *.RC です。まずはVC++を立ち上げて、プロジェクト(ここでは第37夜のソースに追加することを想定します)にファイルを追加してみましょう。

1.リソースファイルを作る

VC++のメニューから、プロジェクト → プロジェクトへ追加 → 新規作成 を選択します。すると 「新規作成」 ダイアログが開くので、リソーススクリプトを選択します。ファイル名は Dialog_text.rc とでも致しましょう。OK ボタンを押すと、プロジェクトに空の RC ファイルが追加されます。





2.リソースエディタ起動 → ダイアログの編集

VC++の統合環境で画面左のファイル窓に表示されている Dialog_text.rc をクリックすると、ソース表示画面に小アイコン(Dialog_text.rc) が現れます。ここを右クリックしてメニューを開き、 挿入を選ぶと「リソースの挿入」 窓が現れます。





ここで、Dialog を選んで「新規作成」をクリックすると、リソースエディタが立ち上がって、下図のようにデフォルトのダイアログが表示されます。




今回の目的は主人公の名前の挿入なのでダイアログは小ぶりのもので充分です。デフォルトのダイアログだとちょっと大きすぎるので、編集してみましょう。ダイアログ本体の角の部分をマウスでつまんでドラッグすると大きさが自由に変えられますので、いくぶん小さめに変形します。またデフォルトで表示されている2つのボタンもマウスでつまんで移動させることができます。ここではとりあえず気分を変えて?横並びに配置換えしてみることにします。




さて、デフォルトのままではボタンが2つあるだけですので、ここにテキストを入力する窓、エディットボックスを追加しましょう。リソースエディタ画面の右側に、アイコンの並んだコントロールBOXがありますので、そこからエディットボックスを選択(=ボタンを押し込む)します。




その状態で、ダイアログ上をマウスで左クリック→ドラッグするとエディットボックスが配置されます。




とりあえず、名前を入力する用途ならこれで充分でしょう。ひとます ファイル→上書き で保存することにしましょう。



3.リソーススクリプトの内容確認

さて、ここでいきなりプログラミングに進みたい気持ちをちょっと押さえて、まずはリソースとして作成したダイアログの内容を確認しておきます。実はダイアログ本体、およびそこに配置したボタン、エディットボックスなどのコントロール(=部品)はそれぞれ固有のID番号で管理されます。番号といっても実際にはシンボルとして文字列の形で扱うので
特にわかりにくいということはありません。ID番号のほかにも、いろいろなオプション設定が指定可能で、これらはすべてリソースエディタ上でプロパティとして参照/編集できます。では、実際に見てみましょう。

1)ダイアログ

リソースエディタのダイアログのキャプションバー上で右クリック→プロパティを選択すると、ダイアログBOX本体のプロパティ窓が開きます。





ここでIDが IDD_DIALOG1 になっていることを確認してください。このIDが、このダイアログBOXを識別するための番号(→内部的には数値で番号が割り当てられています) になります。コンパイラのバージョン違い、あるいは既に別のダイアログの設定をしていたりすると違ったIDが表示されることがあるかも知れませんが、違っていても特に気にする必要はありません。単なる識別番号ですから、プログラミングをする際にソース上のID表記とプロパティで表示されるIDが一致していれば問題はありません。

さて、このダイアログにはキャプションバー(タイトルバー)が付いています。ここに表示する文字列はプロパティ窓のキャプションの部分で編集可能です。名前入力を促す小窓なのですから、ここは「名前を入力してください」とでもしておいたほうがいいかも知れませんね(^^)。キャプションに文字列を入力すると、リソースエディタ上のダイアログにすぐに反映されますので確認もらくちんです。



なお、プロパティではいろいろなオプション設定が可能です。とりあえずここでは「その他のスタイル」中央 のオプションを選んでおきましょう。このオプションはダイアログが開く時、座標を画面の中央に合わせるものです。ここをチェックしない場合、ダイアログはウィンドウの左上の隅(デフォルト位置)に表示されることになります。




2)OKボタン

次に、OKボタンのプロパティを見てみましょう。OKボタンの上で右クリック→プロパティを開くと、IDが IDOK であることをがわかります。プログラミングではこのIDが重要ですのでメモしておきましょう。ボタンに表記されいるOKの文字は、キャプション窓を編集することで変更可能です。「了解」 「よっしゃ」 「是」 など好きな文字列にして遊んでみてください(^^)。





3)キャンセルボタン

キャンセルボタンのプロパティも同様に確認しておきましょう。ここではボタンのIDは IDCANCEL になっています。キャプションが変更できるのはOKボタンと一緒です。





4)エディットボックスのID

エディットボックス上でも右クリックするとプロパティ窓が開きます。ここでも IDをチェックしておきましょう。ここではエディットボックスのIDは IDC_EDIT になっています。なおエディットボックスのプロパティにはキャプションの項目がありませんので、デフォルトで表示されている文字列 「EDIT」 は変更できません。ただしAPIでプログラム的に書き換えが可能なので、表示と同時に書き換え(例:主人公の名前を 柏木耕一 などと表示)てしまえば実用上は困ることはないでしょう。





さて、なんだかリソースエディタの解説だけでえらく長いページになってしまいました(汗 ^^;)。プログラミングについては次回に分割することにしましょう。