灰灰灰彦 2024-07-23 09:50 采纳率: 18.8%
浏览 0
已结题

vc6动态波形曲线绘制问题

如何将当前绘制的曲线图保存下来并在点击暂停按钮时可以完整的显示在绘制区域?并保证随着绘制的进行保存下的曲线图也在不断刷新?
以下为部分绘制代码

for (int i =0 ;i < num; i++)
            {

                dc.SetViewportOrg(610,180);
                dc.MoveTo(0,0);
                // 创建一个点数组来存储所有点
                CPoint* points = new CPoint[200];
                for(int j = 0; j < 200; j++) 
                {
                   points[j] = CPoint(j, -(pDoc->CAL[j] - 128));
                }
                // 使用Polyline一次性绘制所有点
                dc.Polyline(points, 200);
                // 释放内存
                delete[] points;
             
                //在取点位置划线
                dc.SetViewportOrg(610,0);
                pOld = dc.SelectObject(&penC);
                dc.MoveTo(pDoc->VecMaxi[i]+10,155);
                dc.LineTo(pDoc->VecMaxi[i]+10,205);
                dc.MoveTo(pDoc->VecMaxi1[i]+10,305);
                dc.LineTo(pDoc->VecMaxi1[i]+10,355);
                dc.MoveTo(pDoc->VecMaxi2[i]+10,455);
                dc.LineTo(pDoc->VecMaxi2[i]+10,505);
                dc.MoveTo(pDoc->VecMaxi3[i]+10,605);
                dc.LineTo(pDoc->VecMaxi3[i]+10,655);
                pOld = dc.SelectObject(&penB);
                //画噪声门
                dc.MoveTo(0,180-(pDoc->Dline0));
                dc.LineTo(600,180-(pDoc->Dline0));
                dc.MoveTo(0,330-(pDoc->DLine));
                dc.LineTo(600,330-(pDoc->DLine));
                dc.MoveTo(0,480-(pDoc->DLine2));
                dc.LineTo(600,480-(pDoc->DLine2));
                dc.MoveTo(0,630-(pDoc->DLine3));
                dc.LineTo(600,630-(pDoc->DLine3));
                dc.MoveTo(pDoc->Ddelay0+10,155);
                dc.LineTo(pDoc->Ddelay0+10,205);
                dc.MoveTo(pDoc->Ddelay1+10,305);
                dc.LineTo(pDoc->Ddelay1+10,355);
                dc.MoveTo(pDoc->Ddelay2+10,455);
                dc.LineTo(pDoc->Ddelay2+10,505);
                dc.MoveTo(pDoc->Ddelay3+10,605);
                dc.LineTo(pDoc->Ddelay3+10,655);
                pOld = dc.SelectObject(&penA);
}

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-07-23 09:50
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    在Visual C++ 6.0(VC6)和MFC(Microsoft Foundation Classes)环境中绘制动态波形曲线并保存、刷新显示,可以通过以下步骤实现:

    1. 存储波形数据

    首先,需要一个数据结构来存储波形数据。可以使用std::vector或者动态分配的数组。这里以std::vector为例:

    std::vector<CPoint> waveData;
    

    在绘制波形时,将数据点添加到waveData中:

    for (int j = 0; j < 200; j++) {
        waveData.push_back(CPoint(j, -(pDoc->CAL[j] - 128)));
    }
    

    2. 保存波形数据

    当需要保存波形数据时,可以将waveData写入到文件中。例如,可以将其保存为CSV格式:

    void SaveWaveData(const std::vector<CPoint>& data, const std::string& filename) {
        std::ofstream file(filename);
        for (const auto& point : data) {
            file << point.x << "," << point.y << std::endl;
        }
        file.close();
    }
    

    3. 暂停和恢复绘制

    在暂停按钮的事件处理函数中,调用保存函数,并在恢复时从文件中读取数据:

    void OnPause() {
        SaveWaveData(waveData, "wavedata.csv");
        // 可以在这里添加逻辑来暂停绘制
    }
    
    void OnResume() {
        std::vector<CPoint> loadedData;
        std::ifstream file("wavedata.csv");
        int x, y;
        while (file >> x >> y) {
            loadedData.push_back(CPoint(x, y));
        }
        file.close();
        // 使用loadedData重新绘制波形
    }
    

    4. 刷新显示区域

    为了在绘制过程中不断刷新波形图,可以使用MFC的InvalidateRect函数来触发重绘:

    void RefreshWaveDisplay() {
        InvalidateRect(&rect); // rect是绘制区域的矩形
    }
    

    在绘制函数的末尾调用RefreshWaveDisplay来确保每次绘制后都刷新显示。

    5. 定时器

    如果需要定时刷新波形图,可以设置一个定时器:

    SetTimer(1, 1000, NULL); // 每1000毫秒刷新一次
    
    void OnTimer(UINT_PTR nIDEvent) {
        if (nIDEvent == 1) {
            RefreshWaveDisplay();
        }
        CView::OnTimer(nIDEvent);
    }
    

    注意事项

    • 确保在绘制函数中正确处理内存分配和释放,避免内存泄漏。
    • 在实际应用中,可能需要根据具体需求调整保存和刷新的逻辑。
    • VC6是一个较旧的开发环境,某些现代C++特性可能不完全支持,需要根据实际情况调整代码。

    通过上述步骤,你可以实现在VC6和MFC中动态绘制波形曲线,并在需要时保存和刷新显示。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月23日
  • 创建了问题 7月23日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见