WinAPIでキレイに描画する -その1 更新を合わせる-
WinAPIで何も考えずに描画部分を書いていると*1
「重い」わ「チラつく」わではっきり言って見られてものにはならない…。
で、これを改善するにはどうすればいいだろうか?
答えは簡単。メインループ部ではなく、ウィンドウの描画タイミングに合わせて描画すればいい。
具体的にはこんな感じで、描画部分をまとめた関数を別個に作っておいて、
...
/*
* Windowプロシージャ
*/
LRESULT CALLBACK WindowProc( HWND hWnd, UINT msg,
WPARAM wp, LPARAM lp )
{
switch( msg )
{
...
case WM_PAINT:
// 描画用の処理をまとめた関数
// 引数にデバイスコンテキスタあたりを渡しておくと便利?
Draw();
break;
...
}
...
}
...
「WM_PAINT」の所で呼んでやればいい。
ただ、これだけではまだチラついていると思う。
描画のタイミングを合わせたとしても、描画途中の状態が表示されることがあるので、そうなる。
以降、次回で。
*1:ゲームよろしくメインループに「更新→描画」と書いていると