「Windows API」の版間の差分

削除された内容 追加された内容
改行したい場合は、DrawText関数に改行の機能があります。
イベントドリブン方式
343 行
</source>
のように、キーボード入力受け付けを呼び出すコードを追加する必要があります。この名前「WM_KEYDOWN」は決まっていますので、これ以外に変更したら動作しません。
 
 
== イベントドリブン方式 ==
Win32APIのプログラムの実行順序は、ユーザーの操作によって変わります。
 
例えば、キーボード操作をされたときには、<code> case WM_KEYDOWN: </code>のブロックが実行されます。
 
キーボード操作など、なんらかのイベントがされた時にだけプログラムの特定ブロックが実行されるので、イベントドリブン方式といいます。
 
Win32APIのプログラムの実行方式はイベントドリブン方式です。
 
 
 
もし、「操作に関わらず常に何度も実行させたい処理を書きたい」と思っても、そういう処理は書けません。'''仮にアナタが「C言語のコンソールアプリのmain関数のように、特定の関数に依存しない処理を書こう」と思っても、Win32APIにそういう関数はないの'''です。
 
wWinMainなどの関数のブロックは、単に、Win32APIアプリの開始時点をあらわすブロックにすぎず、アプリ起動時に1回だけ実行されるプログラムにすぎません。
 
 
 
Win32APIでは、キーボード操作とは無関係にアプリ起動時に1回だけ実行する処理というのは書けますが、それだって、「アプリ起動」というイベントによって駆動されたプログラムです。
 
 
このように、Win32APIにおいて、原則的にプログラムは、かならず、イベントと関連づけられます。(Win32APIでも、グローバル変数や、includeなど、冒頭文だけ、イベントと無関係に宣言できる。しかし、プログラムの具体的に動作は、必ず、発生条件のイベントと関連づけられる。)
 
 
基本的にOSは、利用者の操作のないときにはメモリを休止させる必要があるので、キーボードの操作の後に必要になる処理も、<code> case WM_KEYDOWN: </code>のブロックに一緒に書くことになります。
 
このため、キーボードの操作以外の処理もまた、<code> case WM_KEYDOWN: </code>のブロックに書くことになります。
 
つまり、イベントの詳細の定義と、イベント発生後に行う処理を、一緒に書くことになります。
 
 
キーボード操作イベントにかぎらず、基本的にwin32APIプログラムでは、たいてい、あるイベントの詳細の定義と、そのイベント発生後に行う処理を、一緒に書く場合になることが、ほとんどです。
 
 
C言語のコンソールアプリの感覚だと、ついつい、イベントの詳細の定義と、イベント発生後に行う処理とを、べつべつのブロックに書こうと考えがちですが、しかしWin32APIでは、そういう書き方は通常は不可能です。
 
 
なお、タイマー機能のある <code> case WM_TIMER: </code>のブロックを追加したり SetTimer というコマンドを使い、「一定の秒数が経過したら○○を実行する」というタイマーのイベントを宣言することにより、キーボード操作とは無関係に自動的な処理を書くこともできます。しかし、これだって「○○秒の経過」というイベントによって駆動されるプログラムにすぎません。
 
そして、このタイマーのブロックにも、けっして「何秒、経過したか」という時間経過のプログラムだけでなく、さらに時間経過イベント後に必要になる処理も一緒に書くことになります。
 
 
== 文字表示の命令 ==