|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
2-1-6. メッセージの働きWindowsは、イベントドリブンなGUIシステムです。あるできごと(イベント)が起こったことできっかけで、システムが動作(ドリブン)します。逆に言えばできごとがなければ、なんら動作しません。そして、できごとをパッケージしてデータ化したものがメッセージです。あちこちに渡され、動作の元になるのでこの名前が付きました。メッセージの発生 まずメッセージが、発生するメカニズムです。メッセージは、キーやマウスで操作した時に発生します。また、CreateWindow などのAPIコールでも発生します。メッセージを発行するAPIもあります。例えば、WM_PAINT メッセージは、ShowWindow 関数でウィンドウをオープンした時に発生します。また、ウィンドウを最大化や最小化して復帰した場合や、リサイズやの操作した場合、そして複数のウィンドウが重なっており、操作により上のウィンドウが除かれた場合などなど、もろもろの操作でも発生します。それに比べ、WM_CREATE メッセージは、CreateWindow 関数をコールした時に1回だけコールされます。この様にメッセージには1回だけのものも、何万・何億回も発生するものもあります。また、WM_TIME は、タイマー設定し特定の時間になると発生します。さらに、ユーザが自分だけの機能を搭載するための、WM_USER メッセージもあります。 メッセージは、メッセージを発生します。1つのメッセージが別のメッセージを作成します。それがまたと連鎖します。例えば、WM_KEYDOWN メッセージは、WM_CHAR,WM_COMMAND,WM_KEYUP などの連鎖の可能性があります。 ポストとセンド メッセージには、ポストとセンドの2種類の動作があります。ポストとは、キュー(メッセージループで説明)にメッセージを積む行為を指します。それに対して、センドとは、プロシージャにメッセージを送出する動作を言います。ポストは積むだけですぐ終了します。積まれたメッセージは、いつか処理されます。それに比べてセンドしたメッセージは、プロシージャをコールし、そのプロシージャが処理を終わるまで制御は返ってきません。そしてプロシージャの返り値がそのまま得られます。PostMessage 関数で、ポストし、SendMessage 関数でセンドします。通常、ポスト処理はシステムが行ないます。自動実行や何か特殊な動作を行なうとき以外は、あまり使わないと思います。それに比べセンドは、あちこちで使用します。特にコントロールやダイアログボックスの操作は、センド処理のオンパレードです。メッセージは第2のAPIです。この場合は、センド動作を言います。メッセージをセンドして対象のウィンドウに、特定の動作を要求できます。またセンドして、何らかの値を取得することもできます。つまりウィンドウの動作を制御したり、状態を取得することがメッセージで可能です。例えば、MDIの機能は、APIは4つしかありません。それに比べアクティブ化や破棄は、12種類のメッセージで行ないます。システムで定義済みのクラスであるコントロールの制御は、大部分はメッセージをセンドすることで実行します。 メッセージの種類 メッセージは、大きく分けて、Windosの本体が処理するものと、コントロールやマルチメディアのためのものがあります。
Common・・・コモンコントロール関連のメッセージ Daialog・・・ダイアログボックス関連のメッセージ Medeia・・・マルチメディア関連のメッセージ System・・・Windowsの本体のシステム関連のメッセージ
|