クライアント領域に、文字やらグラフィックスを描画するには、WM_PAINTメッセージが 来た時に行うのが理想的です。
WM_PAINTメッセージが来るたびに、文字やらグラフィックスが描画されるのでせっかく描画したものが消えてしまうことがありません。
文字を描画する時、一部を変数にしてみましょう。
何かのタイミング(クライアント領域をクリックした時など)で、この変数の値を変化させ、InvalidatRect関数を呼びます。すると、結果としてWM_PAINTメッセージが発行されるので描画内容を変更することかができます。(アプリケーションは自分でWM_PAINTメッセージを発行することはできない)
文字描画には、TextOut関数を知っていれば充分でしょう。余裕のある人はDrawText,DrawTextEx関数についても目を通しておきましょう。実際問題として、クライアント領域に直接TextOut関数などを使って描画する機会はあまりないかもしれません。もっとも大事なことは、WM_PAINTメッセージが来た時に、自分の描画したいことを行う、ということです。そして、 描画内容を変更したい時は、WM_PAINTメッセージが来た時に、描画する内容に変数を利用するということです。
さて、ここまでの理解ができたら、第4章の「デジタル時計」は簡単に理解できるはずです。
「フォントの指定」「多角形の描画」などは飛ばして読んでかまいません。必要が生じたら、その時読み返してみてください。
どうです!!!2日で4章まで征服です。
もし、
SYSTEMTIME st;などが、「どうもピンとこないなーー」
という人は、C言語のtypedefを思い出してください。(拙著「猫でもわかるC言語プログラミング」 (近日刊行予定)にも、この辺のことは書いておきました)
描画の原理がわかったら、自分でいろいろな文字列をクライアント領域に表示してみましょう。
そして、他のウィンドウでそれを隠してみてください。次にそのウィンドウを閉じてみましょう。 自分の描画した文字列は消えていないですね。
あ、もう一つ大事なことがありました!!!
それは、自分で実際にプログラムを書いて、ビルドしてみるということです。 よく、サンプルのプログラムをコピーして、これがうまくビルドできれば終わり、という人が 多いようですが、これではいつまでたっても、何も得るものはありません。
自分でプログラムを書くといっても、sample01.cppの骨格となるプログラムは、HDDのどこかに取っておいて、これをコピーして使います。そして、自力でコードを書き足します。
1回成功したからといって、油断していると翌日には忘れていることが多いです。わかったと思っても何回か新規に作ってみます。こうすることにより、ビルドの練習になります。開発環境の使い方にも慣れます。プロジェクトの作り方も素速くなります。
要するに、プログラムは頭ではなく体で覚えるのです。