灰灰灰彦 2024-07-22 14:42 采纳率: 18.8%
浏览 1
已结题

vc6 绘制动态曲线时的暂停继续问题

如何使用以下代码来完成这样一个功能:在绘制动态曲线的过程中,点击暂停按钮时,屏幕上必须有完整的动态曲线图,点击继续按钮时,动态曲线继续绘制。

int m_nCurrentIndex; // 当前绘制到的点的索引
 
void CYourDialog::OnPause()
{
    m_bIsPaused = true;
    // 保存当前状态
    SaveDrawingState();
}
 
void CYourDialog::ResumeDrawing()
{
    // 从保存的状态恢复
    RestoreDrawingState();
    while (!m_bIsPaused) // 继续绘制
    {
        // 绘制代码,从m_nCurrentIndex开始
    }
}



for (int i =0 ;i < num && !m_bIsPaused; i++)
            {
                if(m_bIsPaused)
                {
                    //暂停显示完整曲线图
                    break;
                }
                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;
//继续进行曲线的绘制...
}
  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-07-22 14:42
    关注

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


    要实现你的需求,我们可以对提供的代码进行一些调整和优化。以下是详细的步骤和代码示例:

    1. 定义全局变量

    首先,我们需要定义一些全局变量来控制绘制状态和存储绘制点。

    bool m_bIsPaused = false; // 控制绘制是否暂停
    int m_nCurrentIndex = 0; // 当前绘制到的点的索引
    CPoint* m_points = nullptr; // 存储绘制点的数组
    

    2. 暂停功能实现

    OnPause()函数中,设置m_bIsPausedtrue,并保存当前绘制状态。

    void CYourDialog::OnPause()
    {
        m_bIsPaused = true;
        SaveDrawingState();
    }
    

    3. 继续功能实现

    ResumeDrawing()函数中,恢复绘制状态,并继续绘制曲线。

    void CYourDialog::ResumeDrawing()
    {
        if (m_bIsPaused) {
            m_bIsPaused = false;
            RestoreDrawingState();
            while (!m_bIsPaused && m_nCurrentIndex < num) {
                DrawCurve();
            }
        }
    }
    

    4. 绘制曲线函数

    定义一个函数DrawCurve()来绘制曲线。

    void CYourDialog::DrawCurve()
    {
        CDC& dc = GetDC(); // 获取设备上下文
        dc.SetViewportOrg(610, 180);
        dc.MoveTo(0, 0);
    
        if (m_points == nullptr) {
            m_points = new CPoint[200];
            for (int j = 0; j < 200; j++) {
                m_points[j] = CPoint(j, -(pDoc->CAL[j] - 128));
            }
        }
    
        dc.Polyline(m_points, 200);
        ReleaseDC(dc);
    }
    

    5. 保存和恢复绘制状态

    定义SaveDrawingState()RestoreDrawingState()函数来保存和恢复绘制状态。

    void CYourDialog::SaveDrawingState()
    {
        // 这里可以根据需要保存更多状态信息
    }
    
    void CYourDialog::RestoreDrawingState()
    {
        // 从保存的状态恢复
        m_nCurrentIndex = 0;
        delete[] m_points;
        m_points = nullptr;
    }
    

    6. 绘制循环改进

    将绘制循环包含在ResumeDrawing()函数中,并在循环中检查m_bIsPaused变量的状态。

    void CYourDialog::ResumeDrawing()
    {
        if (m_bIsPaused) {
            m_bIsPaused = false;
            RestoreDrawingState();
            while (!m_bIsPaused && m_nCurrentIndex < num) {
                DrawCurve();
                m_nCurrentIndex += 200; // 每次绘制200个点
            }
        }
    }
    

    7. 暂停时显示完整曲线图

    OnPause()函数中,重新绘制完整的曲线图。

    void CYourDialog::OnPause()
    {
        m_bIsPaused = true;
        SaveDrawingState();
        DrawCurve(); // 绘制完整的曲线图
    }
    

    通过上述步骤和代码示例,你可以实现在VC6环境下使用MFC进行动态曲线绘制时的暂停和继续功能。

    评论 编辑记录

报告相同问题?

问题事件

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

悬赏问题

  • ¥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局部变量对蓝图不可见