Windowsコード集 上のページ

#0023 CPUに依存しないタイミングルーチン

1秒間の間に何かをやらせるという処理を行う方法です。
例えば、画面のフェードアウト、キャラクターの移動などで使えると思います。

// タイミングを計算するための変数
DWORD tim,tim_begin;
DWORD n;

// アイドリング制御用変数
MSG msg;

// サンプル用
HDC dc;
RECT rect = {0,0,640,480};
HBRUSH brush = NULL;

#define TIMEOUT    1000     // 実行時間

tim_begin = timeGetTime();  // 開始時間

do{
    if((tim = timeGetTime() - tim_begin) >= TIMEOUT)tim = TIMEOUT;

    // 以下の計算式は、0〜255の値をnに格納します
    n = 255 * tim / TIMEOUT;

    // ここで、nの値を使って処理を書きます
    // 以下はウィンドゥを黒から白に変化させるサンプルです
    brush = CreateSolidBrush(RGB(n,n,n));
    dc = GetDC(hwnd);
    FillRect(dc,&rect,brush);
    ReleaseDC(hwnd,dc);
    DeleteObject(brush);

    // アイドリング制御(処理中に他の操作を有効にしたいときは以下を追加します)
    if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    if(!IsWindow(hwnd))break;  // ウィンドゥが破棄された場合を考慮する

}while(tim < TIMEOUT);



上のページ