[MFC]タイマー処理 | Assertion Failed!

[MFC]タイマー処理

特定時間経過したらメッセージが投げられ、

それを受け取るメッセージハンドラ。


メッセージは WM_TIMER


WM_TIMERからOnTimer()というメッセージハンドラが

作成されるので、この中にタイマー満了時の処理を

書けばよい。


例えば時計などのとき、リアルタイムに描画を

更新したいときは次のようにすればおk。


void CClockDlg::OnTimer(UINT_PTR nIDEvent)
{
  if(nIDEvent == 123) //受け取ったメッセージIDのときのみ描画更新
  {
    InvalidateRect(NULL);
  }
  CDialog::OnTimer(nIDEvent);
}


InvalidateRect()関数で自分自身に描画更新のメッセージを投げる。

とっても便利。

第2引数はデフォルトでTRUEだけど、FALSEを与えると背景の更新は行わない。


ダイアログベースのアプリだと、OnPaint()関数に処理が移る。



タイマーを起動させるには、SetTimer()関数を使う。


/*

第1引数:タイマーID

第2引数:タイマー時間(ms)

第3引数:調べてないから不明。基本NULL

*/

SetTimer(123, 500, NULL);


タイマーは起動したら動き続けるので、

動作を完了させるために KillTimer()関数を使う。


/*

第1引数:タイマーID

*/

KillTimer(123);


多分使う機会は結構あるのではないかと思う。