灰灰灰彦 2024-07-25 16:17 采纳率: 18.8%
浏览 0
已结题

vc6通过滚动条控制循环的速度

想通过滚动条来控制for循环中计算和绘图的速度(已知计算绘图几乎同步),例如滚动条指向50时速度为50ms,指向100时速度为100ms。
以下为滚动条和for循环的代码:

void CCalcuView::OnCustomdrawSliderTime(NMHDR* pNMHDR, LRESULT* pResult) 
{
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);
    m_speed=m_SliderTime.GetPos();
    UpdateData(FALSE);
    *pResult = 0;
}

for (i =0 ;i < num; i++)
            {
                file.Read(pBuf,dwFileLen);
                wfile.Open(wname, CFile::modeWrite |CFile::shareDenyNone| CFile::modeNoTruncate|CFile::typeText);
                str.Format("%.2f",mFileHead.fSdep+mFileHead.fStep*i);  //先把深度写入             
                wfile.WriteString(str);
                wfile.Close();
                pDlg->calculwtcal((char*)(unsigned short *)(pBuf+6));   //+6是因为数据结构前面包括时间(4字节)和序号(2字节)
                pDlg->m_nowdepth.SetWindowText(str);
                
                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;
//将视图区域绘制到位图上
                BitBlt(pDlg->m_dcMemory, 0, 0, 600, 600, pDlg->pDC, 610, 105, SRCCOPY);
                //将位图绘制到视图区域
                //BitBlt(pDlg->pDC, 1210, 105, 600, 600, (pDlg->m_dcMemory), 0, 0, SRCCOPY);
                
                pDlg->InvalidateRect(pDlg->rect);
                file.Read(&mData,sizeof(mData)+4);      //有float型 size+4
                nRowOfCurrentNum++ ;
                fRowOfCurrentNum = nRowOfCurrentNum;
                fRowOfTotalNum = nRowOfTotalNum;
                fProPos = (fRowOfCurrentNum/fRowOfTotalNum)*100.00;
                nProPos = fProPos;
                pDlg->m_progress.SetPos(nProPos);  //设置进度条当前进度
            
            }

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-07-25 16:17
    关注

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


    您好,根据您提供的代码和需求,我将给出一个完整的解决方案来实现通过滚动条控制 for 循环中计算和绘图的速度。

    解决方案概述

    1. 修改 OnCustomdrawSliderTime 函数:确保滚动条的值能够正确地设置到 m_speed 变量中。
    2. 添加延时逻辑:在 for 循环的每次迭代后添加 Sleep 函数,使用 m_speed 作为参数来控制延时。

    代码实现

    以下是修改后的代码示例:

    void CCalcuView::OnCustomdrawSliderTime(NMHDR* pNMHDR, LRESULT* pResult) {
        // 确保滚动条的值被正确更新到m_speed
        UpdateData(TRUE);
        m_speed = m_SliderTime.GetPos();
        UpdateData(FALSE);
        *pResult = 0;
    }
    
    // for循环中添加延时
    for (int i = 0; i < num; i++) {
        // ... 省略其他代码 ...
    
        // 执行绘图和计算操作
    
        // 根据滚动条的值添加延时
        Sleep(m_speed); // 延时m_speed毫秒
    
        // ... 省略其他代码 ...
    }
    

    示例输入和输出

    • 示例输入:假设滚动条的初始位置是 50,用户将其滑动到 100。
    • 示例输出:循环的迭代速度从每 50 毫秒一次变为每 100 毫秒一次。

    假设数据

    • num:循环的总次数,假设为 100。
    • m_speed:滚动条的当前位置,范围从 0 到 100,代表延时的毫秒数。

    注意事项

    • 确保 m_speed 的值在合理的范围内,避免过小的值导致界面无响应。
    • Sleep 函数会阻塞当前线程,如果循环中包含大量的计算或绘图操作,可能需要考虑使用非阻塞的延时方法。

    总结

    通过在 for 循环中添加 Sleep(m_speed),您可以根据滚动条的位置控制循环的速度。这种方法简单有效,但需要注意滚动条值的设置和界面响应性。希望这个解决方案能够帮助您实现所需的功能。如果您有任何其他问题或需要进一步的帮助,请随时告诉我。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月25日
  • 已采纳回答 7月25日
  • 创建了问题 7月25日

悬赏问题

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