Win32プログラミング講座 〜 Step8. 構造体とファイルオープンダイアログ 〜今回は、RADツールとは離れ、構造体についての説明をします。扱うプログラムも、プロジェクトではなく、単体ファイル(*.abp)になるので、そのつもりで読んでいって下さい。 構造体 いくつかの変数を集めたものを、構造体と呼びます。1つのものに対して、複数のデータが存在するときに利用されます。構造体の定義方法、利用方法は下のようになります。
' 構造体の定義 Type 構造体名 メンバ変数1 As データ型1 メンバ変数2 As データ型2 メンバ変数3 As データ型3 ... End Type '構造体を利用するとき Dim a As 構造体名 a.メンバ変数1 = ... a.メンバ変数2 = ...構造体の定義はType 〜 End Type文を利用します。構造体の中に構造体を定義することも可能です。 Dim命令語のデータ型に構造体を指定すると、その後、その変数は、「変数名.メンバ変数」というように、変数名の後のドット(.)に続き、メンバ変数を参照することができるようになります。 構造体の使用例 ただ構造体を宣言し、値を格納、参照するのではなく、ここではプロシージャ間での構造体引渡しについてチャレンジしてみましょう。 適当な空のプログラム ファイル(test.abpなど)を作成し、下のようなプログラムを入力してみて下さい。
ガガガSPの前田さんはこっちに置いといて(苦)、GetOneHuman関数のパラメータ部に注目して下さい。"ByRef" なんていうものがありますが、これは構造体をプロシージャ引渡しするときには指定するものだと覚えておいて下さい。厳密には、 「ByRef」 = 「(構造体の)ポインタ引渡しを行いますよ」 ということなのですが、ポインタがよくわかってない方にはちょっと難しいかもしれません。少し強引ですが、構造体とプロシージャが絡み合ったら "ByRef" なんだと思っておきましょう。 OPENFILENAME構造体とGetOpenFileName関数
なんだか、ボタンやコントロールがあって、複雑そ〜な感じがしますが、このダイアログボックス、1つ関数を呼び出すだけで作ることができてしまうという、プログラマーにとっては非常にありがたいものなのです。 GetOpenFileName関数を呼び出すと、このダイアログボックスが表示されるのですが、その前に、OPENFILENAME構造体を定義し、メンバ変数を初期化しなければなりません。OPENFILANEM構造体はけっこう多くのメンバを持ち、いきなりすべてを解説するわけにはいきませんので、今回は最低限おさえておきたいメンバ変数を利用していきます(詳細を知りたい方はヘルプを参照して下さい)。
このようなOPENFILENAME構造体の初期化を行うと、ほぼデフォルトの形の「ファイルを開く」ダイアログボックスが表示されます。ユーザーがキャンセルボタンを押すと、GetOpenFileName関数の戻り値が0になるので、その場合はExitProcess関数でプロセスを終了します。 「開く」ボタンが押されると、選択したファイルの絶対パスが ofn.lpstrFilter に格納されます。 あと、GetOpenFileName関数のほかに、GetSaveFileNameという兄弟関数が存在し、こちらは「ファイルの保存」ダイアログボックスを扱うことができるようになっています。OPENFILENAME構造体の内容の初期化動作も非常に似ているので、GetOpenFileName関数をマスターしてしまえば、GetSaveFileName関数も難なく利用することができるでしょう。
トップへ戻る
|