mfcでリアルタイムにデータを表現する方法

MFCでデータをリアルタイム表示を行うには、次の手段があります。

  1. タイマーを使用:MFCでは、タイマーを使用して定期的にデータを更新し、リアルタイムで表示されるようにすることができます。SetTimer関数を用いてタイマーを作成し、OnTimer関数でデータの更新と画面の更新を行います。

ヘッダファイルにタイマーIDを追加する。

#define TIMER_ID 1

初期化関数内でタイマーを作成する:

SetTimer(TIMER_ID, 1000, NULL);

OnTimer 関数内でデータを更新し、画面表示を更新します。

void CMyDlg::OnTimer(UINT_PTR nIDEvent)
{
    if (nIDEvent == TIMER_ID)
    {
        // 更新数据
        // 更新界面显示
    }
    CDialogEx::OnTimer(nIDEvent);
}
  1. マルチスレッドを利用:データの更新処理をバックグラウンドスレッドで実行し、メッセージのやり取りによりリアルタイムにメインスレッドに反映します。

バックグラウンドスレッドでデータを更新しメッセージを送信する

void CMyThread::Run()
{
    while (m_bRunning)
    {
        // 更新数据
        // 发送消息
        PostMessage(WM_MY_MESSAGE, WPARAM(data), LPARAM(0));
        Sleep(1000);
    }
}

主スレッドのメッセージ処理関数でメッセージを受け取ってインタフェースの表示を更新する:

BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx)
    // 其他消息映射
    ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
END_MESSAGE_MAP()

LRESULT CMyDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
    // 更新界面显示
    return 0;
}
  1. データ監視モード:データが変化するとそれに応じたイベントがトリガーされ、イベント処理関数においてインターフェースの表示が更新されます。

データクラスにイベントを定義する

class CMyData
{
public:
    // 定义事件
    typedef void (CMyData::*UpdateEventHandler)(int);

    void SetUpdateEventHandler(UpdateEventHandler handler)
    {
        m_updateEventHandler = handler;
    }

    void UpdateData(int data)
    {
        // 更新数据
        // 触发事件
        if (m_updateEventHandler)
            (this->*m_updateEventHandler)(data);
    }

private:
    UpdateEventHandler m_updateEventHandler;
};

画面クラスでイベント処理や画面の更新処理を行う

BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx)
    // 其他消息映射
    ON_UPDATE_EVENT(OnUpdateEvent)
END_MESSAGE_MAP()

void CMyDlg::OnUpdateEvent(int data)
{
    // 更新界面显示
}

状況に応じてより適切な方法を選択し、設定することで、リアルタイムにデータを可視化する方法がいくつかあります。

bannerAds