普通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言語の教科書には必ず、変数のスコープとか寿命の解説がありますが、実際にその知識が必要となる場面では、ついつい忘れてしまうものです。