マルチメディアタイマー

OnTimer() じゃなくてマルチメディアタイマーとやらを使うようにしてみた.
これでたぶん Win9X でも 18fps の壁を越えれるはず.
でも,メンバ関数をコールバック関数にするためには,

static void CALLBACK TimeProc( UINT uTimerID, UINT uMsg,
DWORD dwUser, DWORD dwParam1, DWORD dwParam2 );
呼び出す方は,
m_TimerID = timeSetEvent(m_TimerDelay, m_TimerResolution, &TimeProc,
(DWORD)this, TIME_PERIODIC);


static関数にしなくてはならない.
すると static でないメンバ変数にアクセスできなくなるので,
上のようにユーザがコールバック関数に渡せる引数
dwUserに自分自身のポインタ(CWinTabView*)を渡すのだが,
このコールバック関数の中(コールバック関数から呼ばれる関数も含む)で
UpdateAllViews() とかすると CDocument の ASSERT_VALID(pView) に引っかかる.
Invalidate() でメッセージを介して画面更新するとアサートしないので,

View->SendMessage(WM_USER_PUSHING, nFlags,(LPARAM)&point);

というようにユーザメッセージを送るようにした.

ところで Win9X のユーザリソース食いつぶし現象はどうなったんだっけ…?

たぽ
  • たぽ
  • カレン(ST206 3S-GE VVT-i)、BRZ(ZC6 RAエアコン有)でサーキットを走ってます。
    クルマ弄りは基本的にDIY。そのため(?)にガレージ付きの家建てました。

    数年前から登山にも目覚め、時々アウトドアな日記・動画もアップしてます。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください