[ MFC ] タイマーイベントをクラスウィザードで作成する ( WM_TIMER OnTimer )

Pocket

ここでは、MFC アプリケーションでタイマーイベントハンドラを作成する手順と、簡単なタイマーイベントの発生と受付処理を行うサンプルコードを掲載しています。

スポンサーリンク

クラスウィザードでタイマーイベントを作成

MFC ではダイアログに対応する .h .cpp ファイルがそれぞれありますが、まずはタイマーを作成するダイアログ本体か、ファイアログのヘッダファイルを開きます。← これ重要です!!このままの状態で、クラスウィザードを開きます。ソースファイル ( .cpp ) を開いている場合には、タイマーイベントハンドラの追加はできません。

2016-11-17 追記
追加するプロジェクトやするクラス名を選択し直せば良いです。.cpp ファイルを開いた状態では「絶対タイマの追加は無理」というわけではありません。

クラスウィザードは、メニューの [ プロジェクト ] – [ クラスウィザード ] で開くことができます。

クラスウィザード

クラスウィザード

メッセージタブから WM_TIMER メッセージを選択し、ハンドラーの追加ボタンをクリックすると、イベントハンドラー OnTimer が作成されます。なお、図は既に作成済みである状態のものです。

ヘッダファイル ( .h ) には、以下のようにイベントハンドラが宣言されます。

afx_msg void OnTimer(UINT_PTR nIDEvent);

ソースファイル ( .cpp ) にはイベントハンドラの実体の他、必要な MESSAGE_MAP も作成されます。コピペ漏れの心配がありませんし、安全です。

タイマーイベントの発生

タイマーイベントを処理するイベントハンドラを追加したので、次は実際にタイマイベントを発生させて定期的な処理を行ってみます。次のサンプルは OnInitDialog でタイマイベントを発生させています。

//OnInitDialog

// イベントID : 5678 (任意の数値)
// 800ミリ秒間隔
// で、タイマイベントを発生させる
SetTimer(5678, 800, NULL);

タイマーイベントハンドラ ( OnTimer )

タイマイベントが繰り返し発生するイベントを処理するサンプルコードです。とくに何もしていません。

void CMFCApplicationSampleDlg::OnTimer(UINT_PTR nIDEvent)
{
    // 自身で発生させたイベントIDのイベントのみ処理する
    if (nIDEvent == 5678) {
        
        // 何か繰り返し処理
    }
    CDialogEx::OnTimer(nIDEvent);
}

コピペは、ドツボにはまると成果もなく時間だけが無駄に過ぎてしまいます。クラスウィザードで作成したほうが個人的には良いと思います。

スポンサーリンク


Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>