24小时热门版块排行榜    

查看: 1413  |  回复: 8

meteoric1985

新虫 (初入文坛)

[交流] 【求助】求高手帮忙改写数据实时动态显示程序~ 已有3人参与

下面是我已经编写好的显示数据程序,但只能一次性显示。我想改成当fData数组值不断更新,显示曲线能够实时显示。求高手帮忙,我是新手,希望大家多多指教~~~~
               CRect rectspe;
        GetDlgItem(IDC_STATIC_IMAGE)->GetWindowRect(rectspe);
        ScreenToClient(&rectspe);
        CClientDC dc(this);
        CRect BrushRect;
        BrushRect.top=rectspe.top+6;
        BrushRect.bottom=rectspe.bottom-6;
        BrushRect.left=rectspe.left+6;
        BrushRect.right=rectspe.right-6;
       
        CBrush brush(RGB(255,255,255));
       
        dc.FillRect(BrushRect,&brush);

        dc.SetMapMode(MM_TEXT);
        float iWidth=rectspe.Width()-100;
        float iHeigth=rectspe.Height()-40;
        float iWidOrg=rectspe.Width()/2;
        float iHeiOrg=rectspe.Height()/2;
        dc.SetViewportOrg(iWidOrg,iHeiOrg);

        CPen pen(PS_SOLID,1,RGB(0,0,0));
        dc.SelectObject(pen);
        dc.Ellipse(200,200,-200,-200);//画圆
        dc.Ellipse(100,100,-100,-100);//画圆
        CString sTmp;
        for(int n=-5,nTmp=0;nTmp<250;n++,nTmp=50*n)
        {
                for(int m=0;m<50;m+=5)
                {
                        dc.LineTo(50*n+m,0);
                        dc.LineTo(50*n+m,3);
                        dc.MoveTo(50*n+m,0);
                }
                dc.LineTo(50*n,0);
                dc.LineTo(50*n,5);
                dc.MoveTo(50*n,0);
                sTmp.Format("%d",n);
                dc.TextOut(50*n,10,sTmp);
        }
        sTmp.Format("%d",n);
        dc.TextOut(50*n,10,sTmp);
        dc.MoveTo(0,0);
        for(n=-5,nTmp=0;nTmp<250;n++,nTmp=50*n)
        {
                for(int m=0;m<50;m+=5)
                {
                        dc.LineTo(0,50*n+m);
                        dc.LineTo(3,50*n+m);
                        dc.MoveTo(0,50*n+m);
                }
                dc.LineTo(0,50*n);
                dc.LineTo(5,50*n);
                dc.MoveTo(0,50*n);
                if(n==0)
                {
                        dc.MoveTo(50*n,0);
                        sTmp.Format("%d",n);
                        dc.TextOut(50*n,10,sTmp);
                }
                else
                {
                        sTmp.Format("%d",-n);
                        dc.TextOut(10,50*n,sTmp);
                }
        }
        sTmp.Format("%d",-n);
        dc.TextOut(10,50*n,sTmp);
       
        CPen pen1(PS_SOLID,2,RGB(255,0,0));
        dc.SelectObject(pen1);
        DataLineThread();
   
        float r;
        int i;
        r=100;
        float iEvWidth = iWidth/1024;
        float iEvHeight = iHeigth/10;
        for (i = 0;i< 1024;i++)
        {
                X=(r+fData*Enlarge)*cos(i*2*PI/1024);
                Y=(r+fData*Enlarge)*sin(i*2*PI/1024);
            dc.MoveTo((r+fData*Enlarge)*cos(i*2*PI/1024),-((r+fData*Enlarge)*sin(i*PI*2/1024)));
                dc.LineTo((r+fData[i+1]*Enlarge)*cos(i*2*PI/1024),-((r+fData[i+1]*Enlarge)*sin(i*PI*2/1024)));
        }
        pen.DeleteObject();
        pen1.DeleteObject();
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yalefield

金虫 (文坛精英)

老汉一枚

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+1):谢谢参与应助! 2010-05-06 09:04:15
Windows下的程序,不是你(程序员)要干什么,而是你做好准备,Windows有空闲的时候,提醒你上场,就像演员走穴那样。

因此,你要“实时”更新,所要做的事情:

(1)在接收到画图消息时,如同上面的代码,画图、画数据
(2)设置一个定时器(Timer);
(3)每当收到定时消息时,重新画图

因此,所谓“实时”,只是每隔一个时间片段重新画图而已。
2楼2010-05-06 00:49:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

meteoric1985

新虫 (初入文坛)

非常感谢,能不能在我上面的代码的基础上,帮我改进一下呢?
3楼2010-05-06 08:21:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yalefield

金虫 (文坛精英)

老汉一枚


小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by meteoric1985 at 2010-05-06 08:21:23:
非常感谢,能不能在我上面的代码的基础上,帮我改进一下呢?

抱歉,不能。老汉早已金盆洗手咯。
4楼2010-05-06 09:18:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

meteoric1985

新虫 (初入文坛)

jjdg:2楼的建议很实在!你需要用timer或者类似步长之类的变量来触发数据的获取等过程 2010-05-06 16:59:54
还有高手能帮忙吗?急求~~~~
5楼2010-05-06 10:03:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yujun2010


余泽成(金币+1):谢谢参与应助! 2010-05-18 14:01:38
你需要用定时器啊,在定时器里每次进行重绘,并在本次过程中刷新掉上次绘制的曲线,以免产生重叠
6楼2010-05-18 13:15:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yujun2010


小木虫(金币+0.5):给个红包,谢谢回帖交流
其实还有一种办法就是用线程,Sleep一段时间后进行下一次绘图。但是原理和定时器Timer是一样的,都需要在本次绘制过程中刷新掉上次绘制的曲线,时间间隔可取<=50ms,已产生视觉暂留效果,就相当于动态显示了
7楼2010-05-18 14:42:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yujun2010

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+1):谢谢参与应助! 2010-05-18 16:28:06
算了,今天正好有点空给你说明白一点吧:
比如说用定时器Timer()..基于VC/MFC程序的
首先:
SetTimer(1,50,NULL); 产生标示为1的定时器,时间间隔为50ms
然后在定时器函数里写你要画的图:
::OnTimer() //冒号前面是定时器所在的类名,一般是视图View类
{
     Invalidate();//引起窗口重绘--会自动调用OnDraw()函数
}
::OnDraw()
{
     DrawYours();//假设为你的绘图函数
   RemoveLastDraw();//清除上次的绘图---方法有两种:
   //   1,是保存上次绘图的数值,然后设置画笔为背景色,重新绘制
   //     2,是只画一次然后直接刷新掉
}
8楼2010-05-18 15:01:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yujun2010

顺便说下,你的绘图过程最好用函数或类写好,直接调用,以免产生混淆
9楼2010-05-18 15:02:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 meteoric1985 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 306求调剂 +4 来好运来来来 2026-03-22 4/200 2026-03-22 12:43 by 素颜倾城1988
[考研] 085600材料与化工306 +4 z1z2z3879 2026-03-21 4/200 2026-03-21 23:44 by ms629
[考研] 材料学硕301分求调剂 +7 Liyouyumairs 2026-03-21 7/350 2026-03-21 22:31 by peike
[考研] 333求调剂 +5 87639 2026-03-21 7/350 2026-03-21 19:31 by ColorlessPI
[考研] 【考研调剂】化学专业 281分,一志愿四川大学,诚心求调剂 +11 吃吃吃才有意义 2026-03-19 11/550 2026-03-21 18:23 by 学员8dgXkO
[考研] 307求调剂 +3 余意卿 2026-03-18 3/150 2026-03-21 17:31 by ColorlessPI
[考研] 265求调剂 +12 梁梁校校 2026-03-19 14/700 2026-03-21 13:38 by lature00
[考研] 求调剂 +3 白QF 2026-03-21 3/150 2026-03-21 13:12 by zhukairuo
[考研] 303求调剂 +5 睿08 2026-03-17 7/350 2026-03-21 03:11 by JourneyLucky
[考研] 311求调剂 +5 冬十三 2026-03-18 5/250 2026-03-21 00:16 by JourneyLucky
[考研] 一志愿中海洋材料工程专硕330分求调剂 +8 小材化本科 2026-03-18 8/400 2026-03-20 23:16 by JourneyLucky
[考研] 323求调剂 +3 洼小桶 2026-03-18 3/150 2026-03-20 22:54 by JourneyLucky
[考研] 药学383 求调剂 +3 药学chy 2026-03-15 5/250 2026-03-20 22:11 by 云游重阳
[考研] 求调剂 +3 eation27 2026-03-20 3/150 2026-03-20 19:32 by JourneyLucky
[考研] 085601材料工程专硕求调剂 +10 慕寒mio 2026-03-16 10/500 2026-03-19 15:26 by 丁丁*
[考研] 材料考研调剂 +3 xwt。 2026-03-19 3/150 2026-03-19 11:22 by w沐阳w
[考研] 0703化学调剂 +3 妮妮ninicgb 2026-03-17 3/150 2026-03-18 10:29 by macy2011
[考研] 有没有道铁/土木的想调剂南林,给自己招师弟中~ +3 TqlXswl 2026-03-16 7/350 2026-03-17 15:23 by TqlXswl
[考研] 333求调剂 +3 文思客 2026-03-16 7/350 2026-03-16 18:21 by 文思客
[考研] 070300化学学硕求调剂 +6 太想进步了0608 2026-03-16 6/300 2026-03-16 16:13 by kykm678
信息提示
请填处理意见