|
今回も前回からの続きで、ウインドウの上に作ったボタンが押された場合の処理について考えてみようと思います。 |
|
|
前回に出てきたイベント(正確にはメッセージ)には、親ウインドウが作成された時に発生する WM_CREATE と、親ウインドウが破壊される時に発生する WM_DESTROY の2つがありました。 では、とりあえず前回の case WM_CREATE: の処理に続いて以下のような処理を追加してください( case WM_COMMAND から break; までの青色の部分です)。
追加できたらコンパイル( Execute -> Compile )をして、タイプミスなどによるエラーがなければ実行( >> Execute << ボタンをクリック)してみてください。 |
|
さて、上記の処理は一体どんなことをやっているのでしょうか?
ボタンが押された時にイベントが発生し、それが WindowProcedure() 関数にメッセージとして伝えられる時には WM_COMMAND というものになります。 まずはどのような種類のウインドウで発生したかを知るのが lParam です。この lParam が前回の CreateWindow() で作成した hwndButton であれば、イベントが作成されたボタンで発生したことが分かるのです。
また今回はボタンが1つだけですが、場合によっては複数のボタンが作成される場合もあります。その場合、CreateWindow() で作られたということだけでは分からないことがあります。 最後に HIWORD で wParam から取得できる情報ですが、これは何をされたかを知るためのものです。今回のボタンではクリックされるくらいしかないのですが、他の種類のウインドウだった場合、いろいろなこと発生する可能性がありますので、その時に活躍することとなります。
ここまで来れば後はウインドウを終了させる処理だけです。これには DestroyWindow() という、まさにその名の示すままという関数を使用します。この引数に終了させたいウインドウを指定すればOKです。 試しにこの hwnd を今回作ったボタンを表す hwndButton に変更してコンパイル・実行を行なうと、ボタンを押した瞬間にそのボタンだけが消えます(笑)。
と言うことで、前回、今回でボタンを作ってそれが動作するところまでを作成することができました。 |