MFC中可以使用CDC類的功能來繪制動態折線圖。下面是一個簡單的示例代碼:
首先,在MFC的視圖類中創建一個繪圖函數,用于繪制折線圖。在OnDraw函數中調用該繪圖函數。
void CMyView::DrawDynamicLineChart(CDC* pDC)
{
// 設置坐標系的原點和大小
int originX = 50;
int originY = 250;
int chartWidth = 400;
int chartHeight = 200;
// 設置數據點
int dataPoints[] = {50, 100, 150, 200, 250, 200, 150, 100, 50};
// 繪制坐標軸
pDC->MoveTo(originX, originY);
pDC->LineTo(originX + chartWidth, originY);
pDC->MoveTo(originX, originY);
pDC->LineTo(originX, originY - chartHeight);
// 繪制折線
int numDataPoints = sizeof(dataPoints) / sizeof(dataPoints[0]);
int stepX = chartWidth / (numDataPoints - 1);
int prevX = originX;
int prevY = originY - dataPoints[0];
for (int i = 1; i < numDataPoints; i++) {
int x = originX + i * stepX;
int y = originY - dataPoints[i];
pDC->MoveTo(prevX, prevY);
pDC->LineTo(x, y);
prevX = x;
prevY = y;
}
}
void CMyView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDC)
return;
// 在此處添加繪制代碼
DrawDynamicLineChart(pDC);
}
然后,在MFC的框架類中,使用定時器來不斷更新數據,并調用Invalidate函數來觸發重繪。
void CMainFrame::OnTimer(UINT_PTR nIDEvent)
{
CMyView* pView = (CMyView*)GetActiveView();
if (pView != nullptr) {
pView->Invalidate();
}
CFrameWnd::OnTimer(nIDEvent);
}
最后,在MFC的應用程序類中啟動定時器。
BOOL CMyApp::InitInstance()
{
// ...
// 創建并啟動定時器
SetTimer(1, 1000, nullptr);
// ...
}
以上代碼示例中,折線圖的數據點每隔1秒鐘更新一次,并通過Invalidate函數來觸發視圖類的重繪,從而實現動態折線圖的繪制。你可以根據實際需求修改數據點和定時器的時間間隔。