今の今まで何も説明していませんでしたが、 最初に出てきたButtonPushed 関数や、これから紹介する FileOpened 関数は、 今までずっとC言語だけをやってきた方にとって、違和感無く受け入れられる関数なのでしょうか。 もし違和感がないならそれでいいのです。でもこれらは、C言語の考え方では変な関数なのです。 ここから先は、読むと混乱するかもしれないので、 このページだけは飛ばして次へ進んでも構いません。
普通、C言語でのプログラミングだと、 ユーザーが値を入力する必要があったときには、ソフトに
値は?(1〜100で入力) >
などと表示させますね。だからそれに合わせて、ここにも Gettext などの関数を用意しています。
そしてC言語のプログラムだと、値を入力し終えたら計算が始まって、 多くの場合は何らかの結果をprintfで表示します。これは、ここではPrintf 関数で実現しています。
でも、Windowsのソフトをさわっていることを考えて下さい。普通、 何かのアプリケーションを起動しても、いきなり 値は? > などと聞いてくることはありません。 ほとんどの場合、ユーザからなにかのアクションを起こさないと、 ソフト側から何も言ってきません。それどころか、ユーザは、頼みもしないのに勝手に 好きなときにメニューバーの[ファイル]-[開く] を選び、ファイルを開こうとさえしようとします。 C言語の流れからでは考えにくいプログラムです。
(余談:C言語でプログラミング、って書きましたが、ようするに、 DOSコンソールアプリケーションや、UNIXのテキストベースのソフト(実行ファイル) という意味です。「C言語というと変だ!」って突っ込まないように。)
このように、 ユーザのアクションによって何らかのイベントが発生し、そのイベントによって関数 (オブジェクト指向言語ではメソッド)が実行されるプログラムのことを、 イベントドリブンプログラム(イベント駆動型プログラム)と言います。今回の場合、 FileOpened 関数と、ButtonPushed 関数は、頼みもしないのにユーザの気まぐれによって 呼び出される、イベント駆動型の典型的な関数ということになります。 もちろん、イベントはこれだけではありません。メニューバーをさわったり、 マウスをウィンドウ上で動かしたり、文字を入力したり・・・。 それこそ何百というイベントがあり、そのうちのどれが起こったときに、 どの関数を実行させるかを考えてプログラミングしていくのが、Windowsプログラミングなのです。 今回は、そのたくさんのイベントのうち、FileOpened(ファイルを開く) と ButtonPushed(ボタンを押す)に限定して使用しているに過ぎないのです。
ファイル main.cを開いて、ButtonPushed の文字を検索してみて下さい。switch文の中に見つかりましたね。この上の方に、 マウスの左クリック、右クリックのイベントが発生したときの関数が書かれていません。 ここに、ButtonPushed 関数と同じ要領で書くと、マウスのクリックに対して 何かの処理をさせることが出来るようになります。
どうですか? 今回は少しWindowsプログラミングというものに触れてみましたが、混乱していませんか。 まあ、大丈夫だと思います。もし今分からなくても、やってれば分かります。
あ、メインテーマのFileOpened 関数について書きませんでしたね。まあ簡単なので、書式のみ書いておきます。
FileOpened 関数(ファイルを開く) 引数1 char * コモンダイアログやドラッグ&ドロップで得たファイル名 引数2 int ファイル名をどこから得たか
(ドラッグ&ドロップ:FROMDRAGDROP, コモンダイアログ:FROMCOMMON)関数内部の書き換え例
if(filefrom == FROMDRAGDROP)
Printf(STATUS1, "ドラッグ&ドロップだね。\r\n");
else if(filefrom == FROMCOMMON)
Printf(STATUS1, "コモンダイアログからだね。\r\n");
これは分かりますね。
△TOP△ | BACK | NEXT |