さて、第3日目では、SetTimer関数とその関連プログラムについて理解します。(第4章p107-)

普通SetTimer関数は、定期的に何かを実行したい時使います。最も簡単な例が刻々と時刻表示をしたい時などに使います。

タイマーを作成するには、SetTimer関数を、破棄する時はKillTimer関数を使います。

つい忘れがちなので、SetTimer関数を使ったら、すぐにKillTimer関数を書いておきます。

ここで、もっとも大事なことは、どのタイミングで SetTimer関数やKillTimer関数を呼ぶかです。プログラムが開始されると同時にタイマーを作動させたいのであれば、WM_CREATEメッセージが来た時にSetTimer関数を呼べば良いですね。

そして、WM_CLOSEまたは、WM_DESTROYメッセージが来た時にタイマを破棄します。これで、 プログラムが動いている間中、タイマは作動しています。

さて、SetTimer関数が呼ばれてからは、定期的にWM_TIMERメッセージがやって来ます。

このメッセージが来た時に、定期的にやりたいことをします。

SetTimer関数と、WM_TIMERメッセージの扱いに慣れたら、たとえば次のようなプログラムを組んでみましょう。

クライアント領域を左クリックすると、タイマーが動き出し、刻々と時刻表示をする。
右クリックするとタイマーを止める。
これは、もう簡単ですね。このように少しずつ、「どのタイミングで」「何をするのか」という プログラミング方法に慣れてください。

ごちゃ、ごちゃした細かいことは忘れてもかまいません。 もっとも大事なことは、「どのタイミングで」「何をするのか」という点です。

次に、間違えやすいのが、あるメッセージが来た時に、ある変数の値を変更、別なメッセージが来た時に、この変数を利用する場合がよくあります。

プログラムを眺めてみると、一つのメッセージ処理が終わると、break文でswitch文を抜けます。そして、returnして制御を返してしまいます。つまり、上のような場合、変数はグローバル変数か、staticな変数でなくてはなりません。

これは、いくつかプログラムを書いていくうちに、経験的にわかります。C言語の教科書には必ず、変数のスコープとか寿命の解説がありますが、実際にその知識が必要となる場面では、ついつい忘れてしまうものです。


23/Feb/2004 By Y.Kumei
[目次に戻る] [第2日] [第4日]