输入的数据存在一数组中,现在想把数组中的数据用波形图或是坐标点的形式输出,不知道该如何实现?

解决方案 »

  1.   

    你什么环境呢?控制台程序?MFC ? SDK ?不管什么环境,首先要确定数据的显示速度啊,比如一个十字坐标轴,X轴表示时间,Y轴表示数值大小。
    利用绘图函数来绘制、连接这些点。
      

  2.   

    同意,主要用到:
    DC中的
    MoveTo()与LineTo()
      

  3.   

    环境是MFC,可以具体给我指导下吗?
      

  4.   

    是个端口程序,就是实现把采集进数组的数据实时动态的以点或线的形式显示出来环境是MFC,具体该如何做?小弟在此请教,谢谢啊
    能有实例的话更好
      

  5.   

    MoveTo()与LineTo() 
    我绘制资源管理器里CPU,MEM曲线,可参照,
    我的资源里有资源管理的原代码 
    http://download.csdn.net/source/628851
    void CMemUsgesCtl::DrawMemUsges()
    {
        CDC memDC;
    CString strLable;
    CBitmap memBitmap;
    CBitmap* pOldBmp = NULL;
    CString strUsges;
    CPen BackFreePen;
    CPen BackUsedPen;
    CPen *pOldPen    = NULL;
    CPen *pOldMemPen = NULL;
    CRect rectClient; CPaintDC dc(this); GetClientRect(&rectClient);
    m_iGridHeight = rectClient.Height() / m_iGridCount;

    //draw cpu free usges
    BackFreePen.CreatePen(PS_SOLID, m_iGridHeight - 2, m_FreeColor); memDC.CreateCompatibleDC(&dc); 
    pOldMemPen = memDC.SelectObject(&BackFreePen);
    memBitmap.CreateCompatibleBitmap(&dc, rectClient.right, rectClient.bottom);
    pOldBmp = memDC.SelectObject(&memBitmap); for(int i = 0; i < 50 - (int)(m_ulNewUsges / 2); i ++)   
    {
    memDC.MoveTo(rectClient.left + 12,  rectClient.top + i * m_iGridHeight + 6);
    memDC.LineTo(rectClient.right - 12, rectClient.top + i * m_iGridHeight + 6);
    } //draw cpu used usges
    BackUsedPen.CreatePen(PS_SOLID, m_iGridHeight - 2, m_UsedColor);
    memDC.SelectObject(&BackUsedPen); for(int j = 0; j < (int)(m_ulNewUsges / 2); j ++)    //fill used percent
    {
    memDC.MoveTo(rectClient.left + 12,  rectClient.bottom - j * m_iGridHeight - 6);
    memDC.LineTo(rectClient.right - 12, rectClient.bottom - j * m_iGridHeight - 6);
    } //strLable = _T("memory");
    memDC.SetBkMode(TRANSPARENT);
    //memDC.SetTextAlign(TA_LEFT);
    // memDC.SetTextColor(m_LableColor);
    //memDC.TextOut(rectClient.left + 10, rectClient.top + 20, strLable); strUsges.Format("%u", m_ulNewUsges);
    strUsges += "%";
    memDC.SetTextAlign(TA_LEFT | TA_CENTER);
    memDC.SetTextColor(m_ForeFontColor);
    memDC.TextOut(rectClient.left + rectClient.Width() / 2 - 0, rectClient.bottom - 30, strUsges);

    dc.BitBlt(rectClient.left, rectClient.top, rectClient.right, rectClient.bottom,
          &memDC, 0, 0, SRCCOPY); 

    memDC.SelectObject(pOldBmp);
    memDC.SelectObject(pOldMemPen);
    memDC.DeleteDC();
    memBitmap.DeleteObject();
    }
      

  6.   

    主要是MoveTo()与LineTo() ,楼上好
      

  7.   

    我不直到你画图需要什么样的效果,如果绘制的曲线不需要像示波器一样移动,也不是实时的,赞同7楼的代码
    如果绘制曲线的数据量比较大,而且是实时的,建议将绘图部分分为几个函数来实现,首先是定义一个全局的位图(类成员变量)
    1、位图初始化函数;
    2、绘制坐标系函数;
    3、描点函数;
    4、在OnPaint里显示位图
    这样,12两个步骤只是在你重新绘制曲线的时候需要被调用,当接收到数据,只需要每次描点就可以了。如果需要像示波器一样能移动的
    就需要多定义几个位图了,然后通过位图透明运算,把位图组合起来