■ 新・ゲーム開発講座




■ へっぽこプログラミング入門♪


■第4夜:文字の表示@

前回までで、スケルトンについては、あるていど理解できましたでしょうか。いろいろ面倒な内容が出てきましたが、最初からすべてを完全に暗記する必要はないと思います。第2夜の図で示した動作の概念さえ掴んでいれば特に問題はありませんので、どんどん骨格に肉をつけていきましょう。なお、スケルトン以降の講座では、「VC++のHelpを見れば分かるだろう」という内容については適宜解説を省略しながら進行します(さすがに引数やオプションの詳細を全部解説するのは無理がありますしね・・・ ^^;)。

そんな訳で、今回は文字の表示です。一番簡単な文字表示は

TextOut( win_hdc,200,100,"TEST",4);

というあたりでしょうか(^^)。TextOut()は文字列を表示する関数です。この記述例ではデバイスコンテキストのハンドル win_hdc でアクセス可能なウィンドウの座標 (x,y)=(200,100) の位置に TEST という文字列を表示します。最後の引数の 4 は表示する文字列の長さです。
ためしに、スケルトンの WinMain() の win_hdc=GetDC(hwnd); の次の行にこれを挿入して、コンパイル→実行してみてください。ちゃんと文字列が表示されますね?



APIENTRY WinMain(HINSTANCE hIns,HINSTANCE hPI,LPSTR lpArg,int nCmdShow)
{

//省略

ShowWindow(hwnd,nCmdShow); //外枠の描画
UpdateWindow(hwnd); //クライアント領域の描画

win_hdc=GetDC(hwnd); //今後の画面操作に備えて DC を取得しておく

TextOut( win_hdc,200,100,"TEST",4); //文字描画

//省略


}

では次に、同じもの(座標だけちょっと変更 ^^)を Mainloop() に挿入してみてください。

void Mainloop(void)
{
TextOut( win_hdc,100,100,"TEST",4);

}

今度は、表示はされるものの、チラツキが発生したと思います。Mainloop()はタッチ&ゴー式にぐるぐると処理を繰り返していますので、こんなことになります。要するに描画のプロセスが繰り返し見えてしまっている訳ですね。これを回避する方法はいくつかありますが、ここではまだ触れません(^^)。ちなみにソースはこちらになります。どうぞお試しを… m(_ _)m

あれれ、なんだか今回は異様にあっさりと終ってしまいましたね(笑)