首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MFC 多波形圖疊加顯示:單一控件繪製多條曲線

     編輯:程式設計疑難解答

問題

想在 MFC 中實現多個波形圖疊加,或用 Static 控件疊加,不知如何實現。

解決方案

使用一個繪圖控件(如自繪 `CStatic`、第三方 Chart 控件、或直接在 `OnPaint` 繪製),在同一坐標系內繪製多條曲線。

實現要點

  1. 資料結構:`std::vector> curves;` 或 `std::vector`,每條曲線存點陣列、顏色、線型。
  2. 坐標映射:邏輯座標(數據值)→ 客戶區像素座標。
    `x = margin + (valX - minX) * width / (maxX - minX)`
    `y = height - margin - (valY - minY) * height / (maxY - minY)`
  3. 繪製迴圈:
    void CMyChart::OnPaint() {
        CPaintDC dc(this);
        CRect rect; GetClientRect(rect);
        // 畫坐標軸、網格...
        for (auto& curve : curves) {
            CPen pen(PS_SOLID, 1, curve.color);
            CPen* old = dc.SelectObject(&pen);
            dc.Polyline(curve.points.data(), curve.points.size());
            dc.SelectObject(old);
        }
    }
  4. 刷新:資料更新後呼叫 `Invalidate()` 觸發重繪。

進階建議

  • 雙緩衝(`CMemDC`)消除閃爍。
  • 大數據量時用多邊形裁剪、或只繪製可視範圍點。
  • 考慮成熟開源庫:`ChartCtrl` (CodeProject)、`Qt Charts`(若可用 Qt)、`OxyPlot`(C#/WPF)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved