どうも,星姫でーす.
今回はWindows アプリケーションということで,ウィンドウの描画までやってみようと思います.
ウィンドウだけに,窓からこんにちは(笑)
ハイ!では本題に入っていきましょうー.
さっそく皆さんに新規プロジェクトを立ち上げてもらいます.
アプリケーションの種類は次の図のように「Windows アプリケーション」にチェックを入れて下さい.
空のプロジェクトなので,新規に作成したソースファイルに次のコードを書き込んで下さい.
内容はウィンドウを描画するだけのプログラムです.
以下のテキストエリアを「Ctrl + A」で全選択し,「Ctrl + C」でコピーして利用します.
実行結果は以下のようになります.
こんな感じで灰色に塗りつぶされたウィンドウが表示されたら成功です.
終了させるには右上の閉じるボタンかEscキーを押します.
えーっとですね,これ全部説明するのは,私にはちょっと難しいです.
ここも他のサイト様にお任せしようと思います.
キーワードは「Windows API」です.
検索すると以下のサイトがヒットすると思います.
「WisdomSoft」
http://wisdom.sakura.ne.jp/
Win32 API入門について学べば,今回のコードの理解はそんなに難しくありません.
以下,私が今回のコードに抱いているイメージを示します.
説明:
プログラムを理解する上で,最初に頼るのが命令の順序です.
アプリケーションを起動した瞬間,最初にどの命令が読まれるのかを確かめます.
コンソールアプリでは int main() でしたが,Windowsアプリでは int WINAPI WinMain() になります.
アプリで最初に呼ばれる場所はエントリポイントと称されてます.
関数 InitWindow(); にてウィンドウを作成します.
ウィンドウを作成したら, while文で無限ループに入ります.
ここをメッセージループとしたのは,キー入力に対し翻訳とディスパッチ(プロシージャへ転送)を行うからです.
ウィンドウプロシージャはメッセージを受け取って,switch文でそれぞれのメッセージに対し処理する関数です.
特別なメッセージでない限り,ディフォルトのプロシージャを使って対応するように書かれています.
今回はEscキーと閉じるボタンが押された時に関して,終了メッセージを表示するように書きました.
Quit() を良く読むと PostQuitMessage(0); と書かれた命令があると思いますが,これは終了メッセージをポストすると言うことです.
ポスト? 一体何のことなのでしょうか?
ウィンドウ,アプリケーション,ディスパッチ,プロシージャ,ポストの5つのワードを使って図を描いてみます.
以下の図からメッセージの流れを感じ取ってください.
キーボードやマウスなどでモニタ上のウィンドウにメッセージを送ります.
そのウィンドウからメッセージキューにメッセージがポストされます.
順番を守ってキューはファーストイン・ファーストアウトを行います.
図でいうところの,キューからポロリと落ちてきたメッセージをアプリケーションがピークして拾います.
翻訳し,ディスパッチしてプロシージャにメッセージを送ります.
プロシージャは基本的にはウィンドウの操作(ディフォルトのプロシージャまかせ)を行いますが,特別なメッセージに対して
終了メッセージをキューにポストします.おわかりかな?ポストするとはキューにメッセージを送ることです.
終了メッセージをピークしたアプリケーションはメッセージループを抜けて,ウィンドウを破棄してアプリケーションを終了させます.
コードの解読について,おおざっぱなイメージをつかみ,プログラムの詳細を覚えないのがポイントです!
まったく読んだことがないプログラムは厄介ですが,とっかかりとして
最初に呼ばれるコードのところから順にメッセージの流れを見ていき,上記のような概念図を構築するところから始めます.
多少間違っていてもかまいません,ここのコードの塊は〜をしているーという理解の仕方を身につけましょう.
今後は,コードの解説を他サイト様に任せて,概念図を示していく形態を取ろうと思います.
次回から,今回作成したウィンドウに3D描画していきたいですね.
2009/11/08 初記.
2009/11/21 追加.
基礎を身につけることは難しかったが,基礎をもって応用を理解することは簡単だった.