在 MFC 中實(shí)時(shí)顯示數(shù)據(jù)可以通過以下幾種方法來設(shè)置:
例子: 在頭文件中添加定時(shí)器 ID:
#define TIMER_ID 1
在初始化函數(shù)中創(chuàng)建定時(shí)器:
SetTimer(TIMER_ID, 1000, NULL);
在 OnTimer 函數(shù)中更新數(shù)據(jù)并更新界面顯示:
void CMyDlg::OnTimer(UINT_PTR nIDEvent)
{
if (nIDEvent == TIMER_ID)
{
// 更新數(shù)據(jù)
// 更新界面顯示
}
CDialogEx::OnTimer(nIDEvent);
}
例子: 在后臺線程中更新數(shù)據(jù)并發(fā)送消息:
void CMyThread::Run()
{
while (m_bRunning)
{
// 更新數(shù)據(jù)
// 發(fā)送消息
PostMessage(WM_MY_MESSAGE, WPARAM(data), LPARAM(0));
Sleep(1000);
}
}
在主線程的消息處理函數(shù)中接收消息并更新界面顯示:
BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx)
// 其他消息映射
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
END_MESSAGE_MAP()
LRESULT CMyDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
// 更新界面顯示
return 0;
}
例子: 在數(shù)據(jù)類中定義事件:
class CMyData
{
public:
// 定義事件
typedef void (CMyData::*UpdateEventHandler)(int);
void SetUpdateEventHandler(UpdateEventHandler handler)
{
m_updateEventHandler = handler;
}
void UpdateData(int data)
{
// 更新數(shù)據(jù)
// 觸發(fā)事件
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)
{
// 更新界面顯示
}
以上是幾種常見的實(shí)時(shí)顯示數(shù)據(jù)的方法,可以根據(jù)具體情況選擇適合的方法來設(shè)置。