|
え〜っと、2ヶ月ぶりの「窓の工作室」更新です(遅くなってすみませ〜ん)。
今回は前回からの続きですが、実際にプログラムの修正を行なうことによってウインドウにボタンをつける方法を考えてみようと思います。
で、ここからは Windows プログラミングでは避けて通れない「イベントドリブン型のプログラム」というものを知る必要があります。 |
|
|
Windows のプログラムをしようとするとたびたびイベントという単語が登場します。さて、このイベントとは何なのでしょうか。 例えば、ウインドウについているボタンを押した時とか、ウインドウのサイズを変更した時、さらには最初にウインドウが作成された時などにも発生しています。これは自動的に発生するようになっていて、これを使うかどうかはそのウインドウをプログラムした人が自由に決めることができます。
ですので、プログラムを作る人は「あるイベントが発生した時にどのような動作をするのか」ということをプログラムに記述していくことになります。 実は前回の作業で作られたソースコードにもすでにこの処理が含まれていまして、一番最後の部分に書かれている WindowProcedure() という関数がそれに該当します。
これは何をやっているのかと言うと、このプログラムを実行させると何もないウインドウが表示されたと思いますが、このプログラムを終了には現状ではタイトルバーの右端についている「X」ボタンを押すしかありません。 ウインドウ上で発生したイベントはメッセージという形でプログラムに通知されます。プログラムの終了メッセージは WM_DESTROY という名前であらかじめ定義されていますので、この部分( case WM_DESTORY 〜 break; まで)の処理が実行されます。 それ以外のイベントによるメッセージは、その次にある default の部分で処理されますが、今回のプログラムでは特別なことは何もしません。
ここで使われている switch() 〜 case という構文はイベントドリブン型では非常によく使われるものです。switch 文の () の中が case で書かれている条件と一致したら、その case に書かれている部分を実行するというものです。 |
|
|
それでは今回はこれまでの何もないウインドウにボタンを追加する方法を考えてみます。
さて、このボタンは一体いつ作成されるのがいいのでしょうか?ウインドウにマウスカーソルが入った時ですか?そうではありませんよね、もちろんウインドウが作成された時に一緒に作って欲しいですよね。
と言うことで、どのようにすればいいのかが見えてきました。ウインドウが作られたというイベントが発生した時にボタンを作るような処理を書けばいいわけです。
ウインドウが作られた時に発生するイベントは WM_CREATE というメッセージでプログラムに渡されます。
では、とりあえず case WM_DESTROY: の上に次の処理を追加してください( static で始まる1行と case WM_CREATE から break; までの青色の部分です)。
追加できたらコンパイル( Execute -> Compile )をして、タイプミスなどによるエラーがなければ実行( >> Execute << ボタンをクリック)してみてください。 もちろんボタンを押されたイベントが発生した場合の処理を書いていませんので、ボタンを押しても何も起きませんが、とりあえずボタンをくっつけることができました。
プログラムを見ていただければ分かると思いますが、実際にボタンを作成する処理はたったの1行です。
第2引数はボタンの上に書かれる文字列を定義します。ここを変えることでボタンにいろいろな文字列を表示させることができます(「はい」「いいえ」などが代表的でしょうか?)。
という感じで、今回は何もないウインドウの上にボタンをつける方法を書いてみました。 |